为什么NSFileManager在没有这样的文件时在fileExistsAtPath上返回TRUE?

Rex*_*ids 0 iphone xcode objective-c nsfilemanager

NSFilemanager在以下情况下返回true,此时不应该有任何此类文件.怎么了?

    if([myManager fileExistsAtPath:[[self documentsDirectory] stringByAppendingPathComponent:@"Music/songlist.txt"]]){

NSLog(@"file is there");

}
Run Code Online (Sandbox Code Playgroud)

dre*_*lax 7

该文档NSFileManager似乎建议检查文件是否存在,而只是尝试读取文件并正常处理任何错误(例如,文件未找到错误).您所描述的内容听起来并不像竞争条件 - 这是文档建议试图规避的内容 - 但是如果您只是尝试加载文件而不是检查它是否存在会发生什么?例如,您可以尝试以下方法:

NSError *error;
NSStringEncoding encoding;
NSString *fileContents = [NSString stringWithContentsOfFile:fileName
                                               usedEncoding:&encoding
                                                      error:&error];

if (fileContents == nil)
{
    NSLog (@"%@", error);
}
else
{
    NSLog (@"%@", fileContents);
}
Run Code Online (Sandbox Code Playgroud)

如果你得到一个包含所有文件内容的字符串,那么文件显然就在那里.如果您收到错误,那么就会出现问题myManager.

  • 当你考虑大文件时,这是一个可怕的解决方案.您不希望将大文件加载到内存中以检查它们是否存在= / (3认同)