【问题标题】:File access permission in Swift on OSXOSX 上 Swift 中的文件访问权限
【发布时间】:2017-11-10 03:25:35
【问题描述】:

我正在使用:

let dialog = NSOpenPanel()

获取文件 URL。

然后我正在读取文本文件的内容:

let content = try String( contentsOf: dialog.url)

这行得通!

然后我尝试读取同一目录中具有不同扩展名的另一个文本文件:

let b = dialog.url?.deletingPathExtension()
// Add the new file extension
let c = b?.appendingPathExtension("TSN") 

let content2 = try String( contentsOf: c)

这样我得到:

“文件“FLO5.TSN”无法打开,因为您没有查看权限。”

如果我尝试使用来自 NSOpenPanel() 对话框结果的 URL 打开 .tsn 文件,它会起作用。我需要从同一个目录中打开几个具有不同扩展名的数据文件。有没有办法做到这一点?

【问题讨论】:

  • 这是一个沙盒应用程序吗?
  • 没有。在 OSX 中运行
  • 安德鲁:这是一个有点令人困惑的答案。我们已经知道它是 OS X。
  • 很公平。这是一个实际的 OS X 应用程序访问我桌面文件夹中的文件。

标签: macos swift3


【解决方案1】:

启动沙盒!!) Xcode 9 及更高版本默认启用沙盒,这严重限制了与系统的交互。

选择您的目标,然后选择功能并将下载文件夹设置为读/写:

【讨论】:

    【解决方案2】:

    在我的情况下,解决它是startAccessingSecurityScopedResource

    例子:

    let selectedFile = try result.get() // get path to file
    
                    do {
                        // get access to open file
                        if selectedFile.startAccessingSecurityScopedResource() {
                            let path = selectedFile.path
                            let data = NSData(contentsOfFile: path)
                            print(data) // array bytes
                            selectedFile.stopAccessingSecurityScopedResource()
                        }
    
                    } catch {
                        // Couldn't read the file.
                        print(error.localizedDescription)
                    }
    

    关于此功能的 Apple wiki https://developer.apple.com/documentation/foundation/nsurl/1417051-startaccessingsecurityscopedreso

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2018-10-20
      • 2014-10-02
      • 1970-01-01
      • 2011-06-02
      • 2019-02-14
      • 1970-01-01
      相关资源
      最近更新 更多