Я новичок в разработке для 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 / Библиотека / Containers / AppIdentifier / Data /
и let contents = try fileManager.contentsOfDirectory(atPath: desktopURL.path)
не возвращает ни одного контента.
Ну, тогда я использую
deletingLastPathComponent
при получении домашнего пути, чтобы получить мойURL до моего имени пользователя
let homeURL = FileManager.default.homeDirectoryForCurrentUser.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent()
и когда я отлаживаю его, он возвращает
файл: /// Users / myUserName
, как я хотел,Но когда я запускаю код, переменная содержимого по-прежнему равна нулю.
Следующая попытка:
Я искал в Интернете, чтобы проверить альтернативный способ получения пути к каталогу.Поэтому я наткнулся на
NSOpenPanel
Я получаю URL-адрес папки из Panel и использую этот 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 here
получить содержимое напрямую с (вроде) жестко закодированного URL.
Дайте мне знать, нужна ли какая-либо другая информация.