跳转到内容
View in the app

A better way to browse. Learn more.

彼岸论坛

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

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

发表于

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
    }

Featured Replies

No posts to show

创建帐户或登录来提出意见

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.