当路径正确时,为啥 NSFIleManager -fileExistsAtPath 找不到现有文件?

Posted

技术标签:

【中文标题】当路径正确时,为啥 NSFIleManager -fileExistsAtPath 找不到现有文件?【英文标题】:Why can't NSFIleManager -fileExistsAtPath not find an existing file when path is correct?当路径正确时,为什么 NSFIleManager -fileExistsAtPath 找不到现有文件? 【发布时间】:2015-02-03 00:05:46 【问题描述】:

我知道 ios 模拟器每次运行时都会在不同的目录中找到;考虑到这一点,我有这段代码,它为我提供了 Core Data sqlite 文件的目录:

//  find current directory for saori.sqlite
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentDirectory = [[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]firstObject];
NSString *sqliteFilePath  = [[documentDirectory URLByAppendingPathComponent:@"Application Support/SalonBook/saori.sqlite"] absoluteString];
if ([fileManager fileExistsAtPath:sqliteFilePath])
    [MagicalRecord cleanUp];  //  set stack, etc to 'nil'
else  
    NSLog(@"\n\n-->sqlite files not found");  // log message "unable to find sqlite files
    return;

这是 sqliteFilePath 对象的打印输出:

Printing description of sqliteFilePath:
file:///Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/Data/Application/C8FF20F0-41E4-4F26-AB06-1F29936C2208/Library/Application%20Support/SalonBook/saori.sqlite

这是来自 Finder 的文件图像:

问题是:我去sqliteFilePath,saori.sqlite 文件确实在那里!为什么 -fileExistsAtPath 失败了?

【问题讨论】:

不知道为什么这被否决了。有内容的合法问题。 +1。 我的经历几乎相似。似乎如果我存储为路径,然后转换为绝对 URL,它会失败。但是,如果我存储绝对字符串,则不要使用 fileURLWithPath,而是使用 urlWithName: 它成功,认为只要我在正确的一半上它就会互换 【参考方案1】:

因为它仍然是一个 URL。文件路径没有协议,所以你的路径前缀file:/// 无效,无法解析。由于无效路径不包含任何文件,fileExistsAtPath: 返回NO

不过不用担心,您可以直接调用 path 而不是在 URL 对象上调用 absoluteString,它会返回路径。

【讨论】:

不工作......你能给我举个例子,当你说“只是调用路径”时你指的是什么? (接受我的陈述,它会是什么样子?)对不起这个蹩脚的问题,但我不明白它会如何工作...... SD @spokane-dude 你不是打电话给absoluteString,而是打电话给path 谢谢,谢谢!做到了...我在尝试遵循的一些示例中看到了 path 语句,但是在 iOS 文档中我找不到任何解释...再次感谢! @spokane-dude 干杯!为了澄清这一点,absoluteString 只返回完整的 URL,但返回一个字符串。 path 只是返回 URL 的路径,不包含协议之类的东西。对于文件 URL,如果您不能直接使用文件 URL,这正是您想要的。 很棒的答案...感谢您抽出宝贵时间向我解释。也为你加油! :D

以上是关于当路径正确时,为啥 NSFIleManager -fileExistsAtPath 找不到现有文件?的主要内容,如果未能解决你的问题,请参考以下文章

Spark:仅当路径存在时才读取文件

当路径不包含驱动器号时,如何告诉编译器路径是绝对的

cookie的路径决定服务器在发送请求时候 是否决定发送 当路径匹配时候 则发送给服务器

为啥 NSFileManager 找不到这些 png 文件?

为啥这个 SVG 投影过滤器在路径很短时会剪切路径?

为啥 NSFileManager 不工作?