Ответ
FileManager — это класс Foundation, предоставляющий интерфейс для работы с файловой системой устройства в рамках песочницы приложения и доступных ему областей (например, общих папок).
Основные возможности:
- Создание, копирование, перемещение и удаление файлов и директорий.
- Получение содержимого директорий.
- Запрос и установка атрибутов файлов (дата создания, права доступа).
- Определение существования файла или директории.
Работа с путями: Всегда используйте URL, а не строковые пути, для большей надежности и поддержки системных функций.
Пример: Работа с директорией Documents:
let fileManager = FileManager.default
// 1. Получение URL директории Documents приложения
guard let documentsURL = fileManager.urls(for: .documentDirectory,
in: .userDomainMask).first else {
fatalError("Не удалось найти директорию Documents")
}
// 2. Создание новой поддиректории
let imagesFolderURL = documentsURL.appendingPathComponent("UploadedImages")
do {
try fileManager.createDirectory(at: imagesFolderURL,
withIntermediateDirectories: true, // создает промежуточные папки
attributes: nil)
} catch {
print("Ошибка создания директории: (error)")
}
// 3. Запись данных в файл в этой директории
let data = Data("Hello, FileManager!".utf8)
let fileURL = imagesFolderURL.appendingPathComponent("test.txt")
try? data.write(to: fileURL)
// 4. Получение списка файлов в директории
let contents = try? fileManager.contentsOfDirectory(at: imagesFolderURL,
includingPropertiesForKeys: nil)
print(contents ?? [])
Критически важные практики:
- Выполняйте файловые операции в фоновых очередях, особенно если они потенциально долгие (сканирование больших директорий, копирование файлов).
- Всегда обрабатывайте ошибки с помощью
do-try-catch. Операции с файловой системой подвержены сбоям (недостаточно места, нет прав). - Проверяйте существование файла перед операциями, которые могут завершиться ошибкой (например, удаление).
- Для работы с iCloud Drive (
Ubiquity Container) требуется дополнительная настройка прав и использование специальных методовFileManager.