如何使用NSFileHandle从文件中读取整数

时间:2011-11-12 05:46:25

标签: objective-c nsfilehandle

我想从文本文件中读取整数列表,我只想编写像

这样的代码
int temp;
fin>>temp;

但是当我阅读Cocoa文档时,我发现建议NSFileHandle,并且没有像我假设的方法,只有一个相关的方法:

- (NSData *)readDataOfLength:(NSUInteger)length

是否有任何类/方法可以帮助我在Objective C中执行此操作?感谢。

2 个答案:

答案 0 :(得分:1)

  

我想从文本文件中读取整数列表,我只是想   写代码如

     

int temp;鳍>>温度;

您有很多文件访问选择。如果你想使用C ++风格的访问,你可以,但你自然需要使用适当的C ++文件或流方法打开文件。但是,如果使用Objective-C ++,则可以轻松地将C ++代码混合到Objective-C中。

您还可以使用C标准库文件例程,如fopen(),fread()等。

如果文件来自您的程序以外的其他来源,那么使用C或C ++读取文件通常是一个不错的选择。

  

但是当我阅读Cocoa文档时,我发现了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];

另一种选择是使用易于使用的属性列表,但在可以使用的数据类型方面有限。

如果您想详细了解这些主题,请阅读 Archives and Serializations Programming Guide Property List Programming Guide File System Programming Guide < / em>的

答案 1 :(得分:0)

你可以使用Objective-C ++和iostreams。

您可以使用f I / O函数,如fopen和fscanf。 (可能是我做的。)

Apple提供NSScanner进行解析,但它只从字符串中读取,而不是从输入流中读取。如果您真的想要使用它,首先您必须将整个文件(或大块)读入NSString(或NSData,然后将其转换为NSString)。

如果你可以要求文本文件是JSON格式,你可以在一个gulp中读取它并使用NSJSONSerialization来解析它。