2013-07-26 3 views
3

Старый парсер полагается на работу FILE *. Однако API Dropbox Sync для iOS возвращает NSFileHandle * вместо FILE * в качестве дескриптора файла.Как получить FILE * от NSFileHandle *?

Так что я пытаюсь использовать fileDescriptor в виде NSFileHandle:

- (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! 
     // ... 
    } 
} 

Тем не менее, есть EXE_BAD_ACCESS на fseek линии.

ответ

6

fileDescriptor возвращает базовый файловый дескриптор, простое целое число, а не объект FILE (который обертывает дескриптор файла, но не то же самое). Используйте fdopen() для получения объекта FILE из дескриптора файла:

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