对iCloud中可能尚未下载的文件使用NSFileManager.fileExists(atPath :)是否安全?

时间:2019-01-15 13:44:30

标签: cocoa icloud nsurl nsfilemanager icloud-drive

我需要一种100%故障安全的方法来确定文件名/文件URL是否可用于将数据写入磁盘而不会意外删除现有文件。

当前我正在使用NSFileManager.fileExists(atPath:),但我想知道,如果父目录位于iCloud中并且我的文件URL指向iCloud中尚未下载到设备的现有文件,该怎么办?

让我想到的是URL的以下两种方法:

  • func checkResourceIsReachable() throws -> Bool
  • func checkPromisedItemIsReachable() throws -> Bool

资源与承诺项目之间有区别。承诺项目定义为:

  

不能保证承诺的项目在文件中包含其内容   系统,直到您使用文件协调器执行协调读取   在其URL上,这将导致下载内容或其他方式   生成。

背景

我需要的是FileManager的扩展名,该扩展名返回给定(现有)文件URL的下一个可用的,不存在的文件名。例如:

  • 比方说我的现有文档是:/documents/Text.txt
  • 下一个可用的文件名可以是:/ documents / 文本2 .txt

如何检查Text 2.txt在iCloud和iCloud中确实不存在?

这是我目前的做法:

// Safer than: FileManager.default.fileExists(at: url) ?
private func fileExists(at url:URL) throws -> Bool
{
    if (try url.resourceValues(forKeys: [.isUbiquitousItemKey])).isUbiquitousItem == true
    {
        return try url.checkPromisedItemIsReachable()
    }
    else
    {
        return try url.checkResourceIsReachable()
    }
}

0 个答案:

没有答案