有没有大佬帮看一下,沙箱选择文件夹突然就没有权限了,现在可以列出一级文件,二级目录的文件就打不开了,昨天之前还是可以的

68 天前
 treblex

load files error: Error Domain=NSCocoaErrorDomain Code=257 "The file “common” couldn’t be opened because you don’t have permission to view it."

选择文件的代码


Button {
                    reset()
                    isFileImporterPresented = true
                } label: {
                    Label("Choose Folder",systemImage: "square.and.arrow.up").fileImporter(isPresented: $isFileImporterPresented, allowedContentTypes: [.directory]) { result in
                        let _ = result.map { url in
                            tryGetWorkspaceInfo(url)
                        }
                        
                        
                    }
                }.padding(4)

保存 bookmark


try url.bookmarkData(options: [.withSecurityScope], includingResourceValuesForKeys: nil, relativeTo: nil)

从 bookmark 获取 url

if item.bookmark == nil{
            return
        }
        var isStale = false
        do{
            let url = try URL(resolvingBookmarkData: item.bookmark!, options: [.withSecurityScope,.withoutImplicitStartAccessing,.withoutMounting],bookmarkDataIsStale: &isStale)
            root = url
            print("标签过期",isStale)
            if(isStale){
                return
            }
            let statStr = SVN.Util.shared.stat(url: url.path)
            stat = SVN.Stat.parse(str: statStr)
            //            print(stat?.entries[0].status)
            let _ = url.startAccessingSecurityScopedResource()
            files =  FileItem.loadFiles(url: url) ?? []
            url.stopAccessingSecurityScopedResource()
        }catch{
            
        }

加载文件夹的代码


public static func loadFiles(url:URL) -> [FileItem]? {
        var result:[FileItem]? = nil
        do{
            var isDir:ObjCBool = false
            
            FileManager.default.fileExists(atPath: url.path, isDirectory: &isDir)
            if(!isDir.boolValue){
                return nil
            }
            let _ = url.startAccessingSecurityScopedResource()
            let files = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil,options: [])
            url.stopAccessingSecurityScopedResource()
            
            
            
            result = []
            for file in files {
                var isCurrentDir:ObjCBool = false
                FileManager.default.fileExists(atPath: file.path, isDirectory: &isCurrentDir)
                let item = FileItem(url: file,isDir: isCurrentDir.boolValue)
                //                item.children = FileItem.loadFiles(url: file)
                result?.append(item)
            }
            
            
            //            sorted files
            
            let dirs = result!.filter({ $0.isDir }).sorted { cur, next in
                return cur.url.lastPathComponent.localizedCaseInsensitiveCompare(next.url
                    .lastPathComponent) == .orderedAscending
            }
            let others = result!.filter({ !$0.isDir }).sorted { cur, next in
                return cur.url.lastPathComponent.localizedCaseInsensitiveCompare(next.url
                    .lastPathComponent) == .orderedAscending
            }
            
            result = dirs + others
            
        }catch{
            print("load files error:",error)
        }
        return result
    }
1045 次点击
所在节点    iDev
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.fyfyfm.apispeedy.workers.dev/t/1057017

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX