работа со смещениями файлов в target-c - PullRequest
0 голосов
/ 14 июня 2011

Я пытаюсь найти 1000 байтов в дескрипторе файла и записать его в экземпляр NSData (или NSMutableData).

Что я здесь не так делаю?

    int offset = 1000;
    NSFileHandle *fHandle;
    NSMutableData *data;
    fHandle = [NSFileHandle fileHandleForReadingAtPath:@"bigtextfile.txt"];
    [fHandle seekToFileOffset:offset];

    data = [NSMutableData data];
    [fHandle writeData:data];
    [fHandle closeFile];
    [data length]; // this comes out to 0 bytes?

Ответы [ 2 ]

3 голосов
/ 14 июня 2011

Я не уверен, что вы пытаетесь прочитать данные после поиска или хотите написать что-нибудь там? - вы открываете файл для чтения, а затем пытаетесь записать пустые данные.

Если вы хотите читать, то с помощью следующей строки или аналогичного API не пишите

data = [fHandle availableData];

Если вы хотите записать, откройте файл для записи - затем добавьте содержимое в объект NSData и запишите его в файл.

1 голос
/ 14 июня 2011

записать его в экземпляр NSData

Вот основная проблема.Метод -writeData: NSFileHandle не записывает в экземпляр NSData.Он записывает из объекта данных в файл.Таким образом, ваш код создает пустой объект данных, а затем пытается записать его в дескриптор файла только для чтения.На самом деле он не делает ничего, что изменило бы содержимое объекта data.

На считывание данных из файла, вы можете использовать либо -readDataToEndOfFile или -readDataOfLength:.

...