旧的解析器依赖于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
。
答案 0 :(得分:6)
fileDescriptor
返回基础文件描述符,一个简单的整数,而不是FILE
对象(包装文件描述符,但不是同一个东西)。使用fdopen()
从文件描述符中获取FILE
对象:
FILE *file = fdopen([filehandle fileDescriptor], "r"); // Create a read-only FILE object