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
}