使用Objective C从文件中读取字符串

时间:2010-08-06 15:45:01

标签: objective-c cocoa file string

这个很奇怪。希望我会问正确的问题:

我正在使用md5方法创建校验和值,然后将其写入文件。然后我用这个读取文件:

NSString * id_From_File = [[NSString alloc]
                                  initWithContentsOfFile:path_to_ID
                                  encoding:NSUTF8StringEncoding
                                  error:&error];

结果放在NSString中,当我打印时给我非常奇怪的行为。例如,当我使用它来打印时,

id_with_date = [NSString stringWithFormat:@"  %@  %@", dateString, id_From_File];

如果dateString放在第一个参数中,它将打印两个字符串,而在第二个参数中放置id_From_File。如果我切换它们(我需要做),只有id_From_File显示。

编辑1:开关示例:

id_with_date = [NSString stringWithFormat:@" %@  %@", id_From_File, dateString];

我坚信这与id_From_File字符串的编码有关。

任何知识!?

谢谢,

2 个答案:

答案 0 :(得分:10)

NSString实际上应该能够将空字符识别为文件结尾。您是否尝试使用其他方法加载字符串。我会选择这一个:

- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error

此方法会自动检测文件的编码,而不是使用固定的编码对其进行解码。

答案 1 :(得分:0)

我已经解决了这个问题!

这与某些字符串使用空字符来标识结尾的事实有关。请允许我解释一下:

假设您有两个字符串,一个字符串末尾为空字符,另一个字符串不为。根据您订购它们的方式,连接时它们的读取方式会有所不同。

 "somestring(null char)" + "another string"

以上,在某些代码中,将会读取

 somestring

如果地点被切换

 "another string" + "somestring(null char)"

然后你得到

"another string somestring"

我解决这个问题的简单方法就是创建一个带有“some string”子字符串的新字符串,它很容易摆脱导致该bug的最后一个字符。

我希望这是明确和有用的!