【发布时间】:2018-06-11 06:52:22
【问题描述】:
我是 mac OS 开发的新手,所以请原谅我有任何基本问题,但请相信我,我已经做了很多研究,但仍然有点卡住。
所以我正在尝试访问当前用户的桌面内容。
在操场上很容易,只需使用
let homeURL = FileManager.default.homeDirectoryForCurrentUser
let desktopURL = homeURL.appendingPathComponent("Desktop/")
let contents = try fileManager.contentsOfDirectory(atPath:desktopURL.path)
它显示桌面上的所有内容。 但是当我在项目中运行类似的代码时。
let homeURL = FileManager.default.homeDirectoryForCurrentUser
它返回我的应用程序的容器。
file:///Users/myUserName/Library/Containers/AppIdentifier/Data/
和
let contents = try fileManager.contentsOfDirectory(atPath: desktopURL.path) 不返回任何内容。
好吧,那我就用
删除LastPathComponent
同时获取主页路径以获取我的 URL 直到我的用户名
let homeURL = FileManager.default.homeDirectoryForCurrentUser.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent()
当我调试它时,它会返回
file:///Users/myUserName
如我所愿。但是当我运行代码时,内容变量仍然为零。
下一次尝试:
我搜索了互联网以检查获取目录路径的替代方法。 所以我遇到了
NSOpenPanel
我从 Panel 获取文件夹的 URL,并使用该 URL 检查其中的内容。 效果很好
这是代码
func buttonClicked(_ sender : Any){
guard let window = view.window else {return}
let panel = NSOpenPanel()
panel.canChooseFiles = false
panel.canChooseDirectories = true
panel.allowsMultipleSelection = false
panel.beginSheetModal(for: window) { (result) in
if result.rawValue == 1{
let folderURL = panel.urls[0]
print(folderURL)
let contents = self.contentsOf(folder: folderURL)
contents.forEach{
print($0.absoluteString)
}
}
}
}
func contentsOf(folder: URL) -> [URL] {
print("folder path = \(folder.path)")
let fileManager = FileManager.default
do {
let contents = try fileManager.contentsOfDirectory(atPath: folder.path)
let urls = contents
.filter { return $0.first != "." }
.map { return folder.appendingPathComponent($0) }
return urls
} catch {
return []
}
}
但我不明白为什么我不能直接访问内容。
我已经尝试了很多次。在一个项目中,我可以'enter code heret 直接从(某种)硬编码的 URL 获取内容。
如果需要任何其他信息,请告诉我。
【问题讨论】:
标签: swift xcode macos swift-playground