1

我想从文本文件中读取整数列表,我只想编写类似的代码

int temp;
fin>>temp;

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

- (NSData *)readDataOfLength:(NSUInteger)length

是否有任何类/方法可以帮助我在 Objective C 中做到这一点?谢谢。

4

2 回答 2

1

我想从文本文件中读取整数列表,我只想编写类似的代码

国际温度;鳍>>温度;

对于文件访问,您有很多选择。如果你想使用 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];

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

If you want to learn more about these topics, read Archives and Serializations Programming Guide, Property List Programming Guide, and File System Programming Guide.

于 2011-11-12T06:28:54.173 回答
0

您可以像以前一样使用 Objective-C++ 和 iostreams。

您可以使用 fopen 和 fscanf 等 CI/O 函数。(可能我会做什么。)

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

如果您可以要求文本文件为 JSON 格式,则可以一口气阅读并使用 NSJSONSerialization 对其进行解析。

于 2011-11-12T06:20:01.803 回答