【问题标题】:Difference between checking for a file's existence with NSData or NSFileManager使用 NSData 或 NSFileManager 检查文件是否存在的区别
【发布时间】:2012-06-13 23:46:56
【问题描述】:

我正在尝试检查文件是否存在。如果我使用这个:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:filePath]];

if (data == NULL){
   ...
}

我总是收到NULL

比我找到的NSFileManager:

NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:filePath])

按我的预期工作。是什么导致了这两个程序之间的差异?

【问题讨论】:

  • 请注意,dataWithContentsOfURL: 返回 nil 并不一定意味着文件不存在——它只是意味着无法读取文件。
  • 嘿,你给了我一个很好的观点!

标签: objective-c cocoa-touch nsdata nsfilemanager


【解决方案1】:

这两个类只有轻微的相关性。您使用的第一个函数是一个方便的方法,几乎​​可以肯定在后台使用 NSFileManager。但是,否则 NSData 有许多与文件无关的用途。

您使用哪两个取决于您的意图。如果你想读取文件的内容,你可能会使用第一个。如果你想删除一个文件,如果它存在,你肯定会使用第二个。

【讨论】:

    【解决方案2】:

    NSData 处理内容(或数据),可能是文件,也可能不是。

    NSFileManager 处理文件系统上的文件,例如文件的路径、复制/移动、枚举文件夹、检查权限等。它更多地与文件的抽象有关,而不是文件的内容。

    【讨论】:

      【解决方案3】:

      您传递给 URLWithString 的文件路径是什么类型的?如果它是普通路径(不以 file://.... 开头),那么您应该使用 fileURLWithPath: 将字符串路径转换为 ​​URL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-02
        • 2010-10-29
        • 1970-01-01
        • 2012-11-26
        • 2011-06-26
        • 2012-07-19
        • 1970-01-01
        • 2022-06-10
        相关资源
        最近更新 更多