4

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

所以我尝试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!
         // ...
    }
}

但是,有一个EXE_BAD_ACCESS在线fseek

4

1 回答 1

6

fileDescriptor返回底层文件描述符,一个简单的整数,而不是一个FILE对象(它包装了一个文件描述符,但不是一回事)。用于从文件描述符fdopen()中获取对象:FILE

FILE *file = fdopen([filehandle fileDescriptor], "r"); // Create a read-only FILE object
于 2013-07-26T08:39:05.623 回答