fileExistsAtPath
返回NO。如果我有以下代码:
NSURL *newDirectoryPath = ... // path does not begin with a tilda
// and is created using URLByAppendingPathComponent:isDirectory:
BOOL directoryExists = [self.fileManager fileExistsAtPath:[newDirectoryPath absoluteString]];
if (NO == directoryExists)
{
BOOL ret = [self.fileManager moveItemAtURL:self.currentPresentationDirectoryPath toURL:newDirectoryPath error: &err];
// ret is YES, err is nil
directoryExists = [self.fileManager fileExistsAtPath:[newDirectoryPath absoluteString]];
}
即使刚刚使用moveItemAtURL
创建了目录,fileExistsAtPath
仍然返回NO。
我知道文档说明了这一点:
尝试根据当前的状态来预测行为 文件系统或文件系统上的特定文件不是 推荐的。这样做会导致文件出现异常行为 系统竞争条件。
但是我想了解这里的问题 - 如果我关闭应用并重新启动它,那么上面代码中fileExistsAtPath
的第一次检查仍然返回NO,即使该目录之前已成功创建先前执行代码,我可以看到管理器中的目录,我也可以成功地读取目录等内容等。
P.S。没有fileExistsAtURL
:方法吗?
答案 0 :(得分:20)
如果您有NSURL
,-absoluteURL
将无法返回NSFileManager
的可用路径。它将返回带有file://
前缀的绝对URL。例如:file:///path/to/file
。
而是尝试使用其他方法,例如-path
。检查一下是否有效。
NSURL *myURL = /* some url */;
NSString *myPath;
BOOL exi;
myPath = [myURL path];
exi = [[NSFileManager defaultManager] fileExistsAtPath:myPath];
if(!exi) {
NSLog(@"File does not exist");
}