【问题标题】:Detect if file is in iCloudDrive Trash检测文件是否在 iCloud Drive 垃圾箱中
【发布时间】:2018-03-24 14:37:54
【问题描述】:

有没有办法检测 iCloudDrive 上的文件是否已移至 iCloudDrive 垃圾箱? 我可以检查包含“.Trash”的 URL,但我正在寻找一种官方方法来检索它。

【问题讨论】:

    标签: ios objective-c icloud icloud-drive


    【解决方案1】:

    要检测文件/文件夹是否在垃圾箱中,请使用以下代码:

    NSURLRelationship relationship;
    NSError *error;
    [[NSFileManager defaultManager] getRelationship:&relationship ofDirectory:NSTrashDirectory inDomain:0 toItemAtURL:URL error:&error];
    if (relationship == NSURLRelationshipContains) {
        //file is in trash
    }
    

    【讨论】:

    • 请简要说明你的代码在做什么,否则这个问题很容易被认为是低质量的。
    • 这段代码有一些问题: 1.它忽略了error,这意味着如果relationship被预先初始化为零,如果有错误它会给出错误的结果. 2. 它不适用于从 iCloud 文件夹中删除的文件(例如,如果在 Catalina、Desktop 和 Documents 文件夹同步到 iCloud)到~/Library/Mobile Documents/com~apple~CloudDocs/.Trash,因为这样会返回错误(代码=3328“请求的操作无法'未完成,因为该功能不受支持。")
    • 注意:我之前评论的第二部分是针对 macOS,而不是 iOS。
    • 另请注意,如果该项目是符号链接,并且该符号链接现在不指向任何地方(即不指向现有文件或文件夹),您还将收到错误 3328。请参阅stackoverflow.com/q/64663834/43615
    【解决方案2】:

    找到了一种很好的检测方法。从 iOS11 开始,以下方法是可能的:

    NSURL* fileURL; // any file URL pointing to a file resource
    NSURL* trashURL = [NSFileManager.defaultManager URLForDirectory:NSTrashDirectory inDomain:NSUserDomainMask appropriateForURL: fileURL create:NO error:NULL];
    if (trashURL && [fileURL.path hasPrefix:trashURL.path])
    {
        // fileURL is located in the iCloudDrive trash
    }
    

    【讨论】:

    • 确保在以这种方式测试之前获得 fileURL 的规范路径,即通过获取 NSURLCanonicalPathKey 或调用[NSString stringByResolvingSymlinksInPath]。否则,您可能会使用通过符号链接指向垃圾箱的路径,然后您的检查将无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多