#swift #macos #directory #security-scoped-bookmarks
#быстрый #macos #каталог #область безопасности-закладки
Вопрос:
У меня есть следующий код для перечисления в каталоге. URL — адрес каталога передается в качестве параметра функции.
startAccessingSecurityScopedResource
Возвращает true
в начале функции, однако, когда я начинаю перечислять, он возвращает false
все следующие файлы и подкаталоги в исходной папке, выбранной пользователем.
Это код для функции.
func readDirectory(file: URL){ let localFileManager = FileManager() let resourceKeys = Setlt;URLResourceKeygt;([.nameKey, .isDirectoryKey]) let directoryEnumerator = localFileManager.enumerator( at: file, includingPropertiesForKeys: Array(resourceKeys), options: .skipsHiddenFiles )! for case let fileURL as URL in directoryEnumerator { guard let resourceValues = try? fileURL.resourceValues(forKeys: resourceKeys), let isDirectory = resourceValues.isDirectory, let name = resourceValues.name else { continue } } }
Из приведенного выше кода file
переданный параметр возвращает значение true для доступа. Однако в directoryEnumerator
цикле у fileURL
него нет доступа.
Есть ли причина, по которой я теряю доступ к подкаталогам и файлам внутри исходного каталога, к которым, по его словам, у меня есть доступ?
Комментарии:
1. Несвязанный: но
Array(resourceKeys)
это не имеет особого смысла, учитывая, что вы явно сделалиresourceKeys
Set
. Вы можете просто использоватьlet resourceKeys: [URLResourceKey] = [.nameKey, .isDirectoryKey]
и передать этот массив непосредственно вenumerator(at:includingPropertiesForKeys:options:)
иresourceValues(forKeys:)
.