如何从NSFileHandle *获取文件*?

时间:2013-07-26 08:34:04

标签: ios nsfilehandle

旧的解析器依赖于FILE *来工作。但是,适用于iOS的Dropbox Sync API会返回NSFileHandle *而不是FILE *作为文件句柄。

所以我尝试使用fileDescriptor的{​​{1}}:

  

- (NSFileHandle )readHandle:(DBError * )错误

     

返回文件的只读文件句柄。如果文件不是   缓存然后该方法将阻止,直到文件下载。   返回

     

如果可以读取文件,则为文件句柄;如果发生错误,则为nil。

并以NSFileHandle

传递
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! // ... } } 行有一个EXE_BAD_ACCESS

1 个答案:

答案 0 :(得分:6)

fileDescriptor返回基础文件描述符,一个简单的整数,而不是FILE对象(包装文件描述符,但不是同一个东西)。使用fdopen()从文件描述符中获取FILE对象:

FILE *file = fdopen([filehandle fileDescriptor], "r"); // Create a read-only FILE object