我需要一种100%故障安全的方法来确定文件名/文件URL是否可用于将数据写入磁盘而不会意外删除现有文件。
当前我正在使用NSFileManager.fileExists(atPath:)
,但我想知道,如果父目录位于iCloud中并且我的文件URL指向iCloud中尚未下载到设备的现有文件,该怎么办?
让我想到的是URL
的以下两种方法:
func checkResourceIsReachable() throws -> Bool
func checkPromisedItemIsReachable() throws -> Bool
资源与承诺项目之间有区别。承诺项目定义为:
不能保证承诺的项目在文件中包含其内容 系统,直到您使用文件协调器执行协调读取 在其URL上,这将导致下载内容或其他方式 生成。
背景:
我需要的是FileManager
的扩展名,该扩展名返回给定(现有)文件URL的下一个可用的,不存在的文件名。例如:
如何检查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()
}
}