小天管理 发表于 2024年7月12日 发表于 2024年7月12日 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 }
已推荐帖子