如何从 NSFileHandle * 获取 FILE *?
Posted
技术标签:
【中文标题】如何从 NSFileHandle * 获取 FILE *?【英文标题】:How to get FILE * from NSFileHandle *? 【发布时间】:2013-07-26 08:34:03 【问题描述】:旧的解析器依赖FILE *
工作。但是,适用于 ios 的 Dropbox Sync API 返回 NSFileHandle *
而不是 FILE *
作为文件句柄。
所以我尝试使用fileDescriptor
的NSFileHandle
:
- (NSFileHandle )readHandle:(DBError *)error
返回文件的只读文件句柄。如果文件不是 缓存然后该方法将阻塞,直到文件被下载。 返回
如果文件可以读取,则为文件句柄,如果发生错误,则为 nil。
并作为FILE *
传递:
- (void)loadDBFile:(DBFile *)dbFile
DBError *dbError;
NSFileHandle *fileHandle = [dbFile readHandle:&dbError];
if (fileHandle)
FILE *file = fileHandle.fileDescriptor;
fseek(file, 0, SEEK_END); // EXE_BAD_ACCESS here!
// ...
但是,fseek
行中有一个 EXE_BAD_ACCESS
。
【问题讨论】:
【参考方案1】:fileDescriptor
返回底层文件描述符,一个简单的整数,而不是 FILE
对象(它包装了一个文件描述符,但不是一回事)。使用fdopen()
从文件描述符中获取FILE
对象:
FILE *file = fdopen([filehandle fileDescriptor], "r"); // Create a read-only FILE object
【讨论】:
以上是关于如何从 NSFileHandle * 获取 FILE *?的主要内容,如果未能解决你的问题,请参考以下文章