Подтвердить что ты не робот

Только чтение "N" байтов из файла в Cocoa

Как читать только "N" байты из указанного файла?

4b9b3361

Ответ 1

Если вам нужен произвольный доступ к содержимому файла способом, похожим на загрузку его через NSData, но без фактического чтения всего в памяти, вы можете использовать сопоставление памяти. Это означает, что файл на диске рассматривается как раздел виртуальной памяти и будет выгружаться в него так же, как обычная виртуальная память.

NSError * error = nil;
NSData * theData = [NSData dataWithContentsOfFile: thePath
                                          options: NSMappedRead
                                            error: &error];

Если вам не нужны данные об ошибках файловой системы, вы можете просто использовать:

NSData * theData = [NSData dataWithContentsOfMappedFile: thePath];

Затем вы просто будете использовать метод NSData -getBytes:range: для вывода определенных фрагментов данных, и только соответствующие части файла будут фактически считаны из постоянного хранилища; они также будут иметь право на выгрузку.

Ответ 2

- [NSFileHandle readDataOfLength:].

NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *fileData = [handle readDataOfLength:N];
[handle closeFile];

Ответ 3

Если вы хотите избежать чтения всего файла, вы можете просто использовать стандартные функции ввода/вывода C:

#include <stdio.h>
...
FILE *file = fopen("the-file.dat", "rb");
if(file == NULL)
    ; // handle error
char theBuffer[1000];  // make sure this is big enough!!
size_t bytesRead = fread(theBuffer, 1, 1000, file);
if(bytesRead < 1000)
    ; // handle error
fclose(file);

Ответ 4

Откройте файл:

NSData *fileData = [NSData dataWithContentsOfFile:fileName];

Прочитайте нужные байты:

int bytes[1000];
[fileData getBytes:bytes length:sizeof(int) * 1000];