为什么我的命令行pgm看不到这个文件?

时间:2011-04-03 16:02:20

标签: objective-c file nsstring load

非常奇怪的问题。我一直在测试我的小命令行程序,它读取一个文件并解析它,它与我的测试数据工作正常,但是当我追求真实的东西时,它找不到文件。

原始文件是通过文本编辑放在一起的文本文件,实际文件是以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;
}

1 个答案:

答案 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。始终如一。

否则将导致崩溃和其他错误行为。