ios - 如何在iOS中比较两个同名文件以检查它们是同一文件的副本还是不同文件的副本
问题描述
我正在使用 UIDocument 将文档文件保存到 Documents 目录中的本地存储沙箱中。我在 iCloud 中有另一个同名文件。如何检查这两个文件是同一个文档文件的副本还是两个同名的不同文档文件?
使用 NSFileVersion 不会告诉我它们是否是同一个文件,只是它是什么版本的文件。
我尝试获取文件的资源值,但本地存储沙箱中的文件给我 nil 作为文档标识符。
下面是使用 documentIdentifier 资源值的代码:
let localFileResourceValues = try? self.document!.fileURL.resourceValues(forKeys: [URLResourceKey.documentIdentifierKey])
let iCloudFileResourceValues = try? destinationURL.resourceValues(forKeys: [URLResourceKey.documentIdentifierKey])
print("documentIdentifier", localFileResourceValues?.documentIdentifier as Any, iCloudFileResourceValues?.documentIdentifier as Any, localFileResourceValues?.documentIdentifier == iCloudFileResourceValues?.documentIdentifier)
打印结果:
documentIdentifier nil 可选(133819) false
是否可以从本地存储沙箱中的文件中获取 NSMetadataItem?
我将不胜感激任何帮助。
解决方案
要确定两个文件路径是否指向同一个文件对象,您需要使用 规范化文件路径NSString stringByStandardizingPath
,然后使用 解析符号链接NSString stringByResolvingSymlinksInPath:
,然后比较路径。这个网页有一个很好的描述和现成的代码。
找出两个文件是否具有相同的内容,即使它们可能是不同的文件对象,NSFileManager contentsEqualAtPath:andPath:
这很有用。
推荐阅读
- c# - C# Lambda 加入 OR 条件
- javascript - 遍历和解析存储在本地存储中的数组中的 JSON 对象
- github - 从 github 拉取时如何避免 Permission denied (publickey)?
- html - 如何更改导航栏中的文本颜色
- python - 在单词末尾替换特定字符
- amazon-web-services - AWS SAM 在 template.yaml 中设置已有的 gatewayapi
- api - 使用来自输入的值的 Axios 进行 API 调用,Vue.js 3
- javascript - 是否可以传递价值
至
- google-cloud-shell - --min-instances google cloud function cloud shell 命令错误
- automation - 我想找到自输入 pine script 以来的最高价格?