非常奇怪的问题。我一直在测试我的小命令行程序,它读取一个文件并解析它,它与我的测试数据工作正常,但是当我追求真实的东西时,它找不到文件。
原始文件是通过文本编辑放在一起的文本文件,实际文件是以MS-Dos格式从Microsoft Word保存的。当我试图读取MS Word文件时,它找不到它。我没有收到错误但是从文件加载方法中得到了一个nil字符串。然后我将我的测试文件重命名为相同的名称,它获得了原始的测试数据。咦?在最坏的情况下,我认为我会看到某种奇怪的数据加载到我的字符串中......不是零。
这是代码段的程式化部分。请忽略数据文件NSString周围的'捕获和释放'代码......我意识到我不需要这样做,这不是问题的关键。
datafilename设置为“config1.txt”。
(NSString*) OpenEntryFile: (NSString*) pathname withdatafilename: (NSString*) datafilename {
NSStringEncoding encoding;
NSError* error = nil;
NSString* inputdatafile;
NSString* response;
NSString *homeDir = NSHomeDirectory();
NSString *fullPath = [homeDir stringByAppendingPathComponent:datafilename];
filepointer = 0;
[Datafile release];
inputdatafile = [NSString stringWithContentsOfFile: fullPath usedEncoding:&encoding error:&error];
Datafile = [inputdatafile copy];
response = [NSMutableString stringWithString: @"OK"];
if (error) {response = [NSMutableString stringWithString: @"ERROR"];};
if ([Datafile length] < 60) {response = [NSMutableString stringWithString: @"SHORT"];};
return response;
}
答案 0 :(得分:28)
此代码存在许多问题;
Datafile
应为dataFile
if(error)
错了;只有通过检查返回值才能知道是否生成了错误。
您无需使用NSMutableString
作为回复。只需直接使用常量字符串。
无需将数据复制为stringWithContentsOfFile:
;只保留结果字符串(如果有的话)。
如果您nil
获得inputdatafile
,则会生成错误。即如果没有包含问题描述的error
,则返回的字符串不能为。
即。这将始终输出字符串或错误:
if (inputdatafile)
NSLog(@"%@", inputdatafile);
else
NSLog(@"error %@", error);
来自评论:
if ([error code]) {response = [NSMutableString stringWithString: @"ERROR"];}
完全错误。
The rules are that you must check the return value prior to checking the error。始终如一。
否则将导致崩溃和其他错误行为。