Управление каталогами
Создавайте, просматривайте и удаляйте каталоги.
«Управление каталогами» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Управление каталогами
FileManager — это основной объект для создания, просмотра, перемещения и удаления файлов и папок.
Общий FileManager
Для большинства операций используйте FileManager.default. Он предоставляет общий экземпляр, безопасный для работы из разных потоков.
import Foundation
let fm = FileManager.default
print("Got the default file manager")Создание каталога
createDirectory(at:withIntermediateDirectories:) создаёт папку и при необходимости также создаёт отсутствующие родительские каталоги.
import Foundation
let fm = FileManager.default
let dir = URL(fileURLWithPath: "/tmp/myapp/cache")
try? fm.createDirectory(at: dir, withIntermediateDirectories: true)
print("Directory created")Проверка существования
fileExists(atPath:) сообщает, существует ли путь, а флаг, передаваемый для изменения, указывает, является ли он каталогом.
import Foundation
let fm = FileManager.default
var isDir: ObjCBool = false
let exists = fm.fileExists(atPath: "/tmp", isDirectory: &isDir)
print("Exists: \(exists), isDir: \(isDir.boolValue)")Просмотр содержимого
contentsOfDirectory(at:includingPropertiesForKeys:) возвращает URL-адреса внутри каталога.
import Foundation
let fm = FileManager.default
let dir = URL(fileURLWithPath: "/tmp")
if let items = try? fm.contentsOfDirectory(at: dir, includingPropertiesForKeys: nil) {
print("Item count: \(items.count)")
}Просмотр только имён
Вариант contentsOfDirectory(atPath:), принимающий путь, возвращает обычные строки с именами файлов, если полные URL-адреса не нужны.
import Foundation
let fm = FileManager.default
if let names = try? fm.contentsOfDirectory(atPath: "/tmp") {
print("Names count: \(names.count)")
}Удаление элементов
removeItem(at:) удаляет файл или всё дерево каталогов. Используйте этот метод с осторожностью.
import Foundation
let fm = FileManager.default
let url = URL(fileURLWithPath: "/tmp/myapp/cache/old.txt")
try? fm.removeItem(at: url)
print("Removed item if it existed")Перемещение и переименование
moveItem(at:to:) перемещает или переименовывает элемент, а copyItem(at:to:) создаёт копию файла.
import Foundation
let fm = FileManager.default
let src = URL(fileURLWithPath: "/tmp/a.txt")
let dst = URL(fileURLWithPath: "/tmp/b.txt")
try? fm.moveItem(at: src, to: dst)
print("Moved if source existed")Рекурсивный обход
FileManager.DirectoryEnumerator рекурсивно обходит всё поддерево, возвращая URL-адрес каждого вложенного элемента.
import Foundation
let fm = FileManager.default
let root = URL(fileURLWithPath: "/tmp")
if let e = fm.enumerator(at: root, includingPropertiesForKeys: nil) {
var count = 0
for case _ as URL in e { count += 1; if count > 5 { break } }
print("Walked some entries: \(count)")
}Атрибуты файлов
attributesOfItem(atPath:) возвращает метаданные, например размер и дату изменения, в словаре.
import Foundation
let fm = FileManager.default
if let attrs = try? fm.attributesOfItem(atPath: "/tmp"),
let size = attrs[.size] {
print("Has size attribute: \(size)")
}Обработка сбоев
Операции с каталогами вызывают ошибку при проблемах с разрешениями или отсутствующем пути. Оберните их в do/catch, чтобы корректно обработать такие ситуации.
import Foundation
let fm = FileManager.default
do {
try fm.removeItem(at: URL(fileURLWithPath: "/no/such/file"))
} catch {
print("Remove failed: \(error.localizedDescription)")
}Быстрая проверка
Какой вариант заставляет createDirectory также создавать отсутствующие родительские каталоги?
Итоги
FileManager.default создаёт каталоги с помощью createDirectory, проверяет их существование с помощью fileExists, просматривает содержимое через contentsOfDirectory, удаляет элементы с помощью removeItem, а также перемещает и копирует их. Вы также выполнили обход поддеревьев и прочитали атрибуты. Далее: каталоги песочницы приложения.
Часто задаваемые вопросы
Урок «Управление каталогами» бесплатный?
Да — полный текст урока «Управление каталогами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Управление каталогами»?
Создавайте, просматривайте и удаляйте каталоги. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Управление каталогами»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- URL и пути к файлам
- Чтение и запись данных
- Управление каталогами
- Каталоги песочницы приложения