Как использовать NSFileHandle для чтения целых чисел из файла - PullRequest
1 голос
/ 12 ноября 2011

Я хочу прочитать список целых чисел из текстового файла, я просто хочу написать код вроде

int temp;
fin>>temp;

Но когда я прочитал документацию по Какао, я обнаружил, что NSFileHandle предлагается, и нет никакого способа, как я предполагал, только один связанный метод:

- (NSData *)readDataOfLength:(NSUInteger)length

Есть ли какой-нибудь класс / метод, который может помочь мне сделать это в Objective C? Спасибо.

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

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

int temp;fin >> temp;

У вас есть много вариантов доступа к файлам.Если вы хотите использовать доступ в стиле C ++, вы можете, но вам, естественно, нужно открыть файл, используя соответствующий файл C ++ или потоковые методы.Однако, если вы используете Objective-C ++, вы можете легко смешивать код C ++ с вашим Objective-C.

Вы также можете использовать стандартные процедуры файла библиотеки C, такие как fopen (), fread () и т. Д.

Использование C или C ++ для чтения файлов часто является хорошим выбором, если файлы поступают из источника, отличного от вашей программы, что-то вне вашего контроля.

Но когда я читаю документ Какао,Я обнаружил, что предлагается NSFileHandle, и нет метода, как я предполагал, только один связанный метод:

Опять же, много вариантов.Да, вы можете использовать NSFileHandle для чтения байтов из файла в объект NSData, а затем вы можете получить диапазоны байтов из объекта данных.Однако гораздо более распространенным способом записи и чтения данных является использование NSKeyedArchiver и NSKeyedUnarchiver:

NSData *data = [NSData dataWithContentsOfFile:pathToFile];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
int age = [unarchiver decodeIntForKey:@"Age"];
int weight = [unarchiver decodeIntForKey:@"Weight"];
NSString *name = [unarchiver decodeObjectForKey:@"Name"];

Хотя это всего лишь верхушка айсберга.Похоже, много кода по сравнению с тем, что вы искали, но это также может быть намного меньше работы.Поскольку объекты и их отношения могут храниться и считываться, вы можете читать сложный график объектов с очень небольшим кодом:

OrgChart *chart = [NSUnarchiver unarchiveObjectWithFile:pathToFile];

Другой вариант - использовать списки свойств, которые очень просты в использовании, ноограничено в типах данных, которые можно использовать.

Если вы хотите узнать больше об этих темах, прочитайте Руководство по программированию архивов и сериализаций , Руководство по программированию списка свойств и Руководство по программированию файловой системы .

0 голосов
/ 12 ноября 2011

Вы можете использовать Objective-C ++ и iostreams, как вы привыкли.

Вы можете использовать функции CI / O, такие как fopen и fscanf.(Вероятно, что бы я сделал.)

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

Если вам может потребоватьсяТекстовый файл должен быть в формате JSON, вы можете прочитать его одним глотком и использовать NSJSONSerialization для его анализа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...