NSFileManager 中是不是有任何方法可以仅获取某些字节范围的文件内容

Posted

技术标签:

【中文标题】NSFileManager 中是不是有任何方法可以仅获取某些字节范围的文件内容【英文标题】:Is there any way in NSFileManager to get contents of a file only for some range of bytesNSFileManager 中是否有任何方法可以仅获取某些字节范围的文件内容 【发布时间】:2013-04-01 13:53:54 【问题描述】:

我有一些大小为 6.7GB 的文件,甚至更多(这些是视频文件)。 我想将大块文件数据发送到我的服务器,所以我目前要做的是:

contents = [fileManager contentsAtPath:path];
if (mFileOffset<[contents length]) 
NSRange range = NSMakeRange(mFileOffset, (allowedSize>[contents length]?[contents length]:allowedSize);
contents =[contents subdataWithRange:range];

但是,这会产生内存问题:

malloc: *** mmap(size=616927232) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
APP(2700,0x4136000) malloc: *** mmap(size=616927232) failed (error code=12)
*** error: can't allocate region

有没有像c++ 中的fseek 这样的方法让我只读取指定范围内的文件字节?

【问题讨论】:

fseek 应该仅供参考。 @CarlVeazey:我想要 Obj-C 中的东西 【参考方案1】:

NSFileHandle 中有一个方法可以同步读取数据,直到指定字节数。

-[NSFileHandle readDataOfLength:]

寻求:

– offsetInFile
– seekToEndOfFile
– seekToFileOffset:

【讨论】:

如何从特定点读取文件。例如,如果我的文件大小为 5 MB,我想从 200KB 读取到 400KB? NSFileHandle 有一个seekToFileOffset 方法:-) @NikitaP:请查看编辑并阅读 nsfileHandle 文档。【参考方案2】:

fseek 不是C++,它是一个C 函数。 Obj-C 也有同样的功能。

请注意,Obj-C 只是C 之上的一层,每个有效的C 代码也是一个有效的Obj-C 代码。

文件函数也被抽象为Obj-CNSFileHandle。但是,这个类与fopenfseekfclose等具有完全相同的功能。

【讨论】:

苏丹先生,我一直试图从 C 文件处理中运行,但我喜欢 C++ seekg seekp 等,c++ 更容易,但现在在 obj-c 中比 iostream 更容易,什么你说?

以上是关于NSFileManager 中是不是有任何方法可以仅获取某些字节范围的文件内容的主要内容,如果未能解决你的问题,请参考以下文章

如何判断文件是不是已通过 NSFileManager ios 上传

NSFileManager - 创建一个只读文件

NSFilemanager 回到一个目录?

NSFileManager 是不是将修改日期等元数据与文件一起复制?

NSFilemanager 的使用

NSFileManager:如果存在重复文件