如何从NSFileHandle*获取文件*?

ohh*_*hho 4 nsfilehandle ios

一个旧的解析器依赖于FILE *工作.但是,Dropbox Sync API for iOS会返回一个NSFileHandle *而不是FILE *一个文件句柄.

所以,我尝试使用fileDescriptorNSFileHandle:

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

返回文件的只读文件句柄.如果文件未缓存,则该方法将阻止,直到文件被下载.返回

如果可以读取文件,则为文件句柄;如果发生错误,则为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!
         // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,有一个EXE_BAD_ACCESSfseek行.

Jus*_*Sid 6

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

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