#swift #nsfilemanager #uidocument
Вопрос:
С помощью FileManager можно проверить, существует ли файл, используя FileManager
метод fileExists(atPath:)
при сохранении файлов в песочнице приложения.
Однако при работе напрямую с UIDocument
методом сохранения save(to:for:completion)
можно принять новый URL-адрес, который перезаписывает все, что могло там быть, без предупреждения, что облегчает случайную перезапись файла. На самом деле, насколько мне известно, ни один из методов UIDocument не сообщает подробных сведений о том, почему операция с документом могла завершиться неудачно.
Возможен ли этот тип проверки только с помощью FileManager или какой-либо другой платформы?
1. Определите Подкласс Документа
class TextDocument: UIDocument {
var text: String?
}
2. Получить URL-адрес каталога документов
let documentsDirectory = FileManager.default.urls(for: .documentDirectory,
in: .userDomainMask).first!
3. Создайте 2 документа и сохраните
let doc1 = TextDocument(fileURL: documentsDirectory
.appendingPathComponent("File 1")
.appendingPathExtension("txt"))
let doc2 = TextDocument(fileURL: documentsDirectory
.appendingPathComponent("File 2")
.appendingPathExtension("txt"))
doc1.save(to: doc1.fileURL, for: .forCreating) { success in
print(success) // prints true
}
doc2.save(to: doc2.fileURL, for: .forCreating) { success in
print(success) // prints true
}
4. Проблема: Сохранение doc1 в URL-адрес doc2 перезаписывает doc2 без предупреждения.
doc1.save(to: doc2.fileURL, for: .forOverwriting) { success in
print(success) // prints true
}
Комментарии:
1. Вы используете
FileManager
. Почему ты не хочешь использоватьfileExists(atPath:)
?2. Документация Apple рекомендует этого не делать. Также я пытаюсь учиться. iOS FileIO, похоже, имеет разбросанные функции, и я пытаюсь понять, какие зависимости мне могут понадобиться, и поведение каждой из них. Например, в
Data
приложении естьwrite(to:options)
встроенная опция для предотвращения перезаписи файлов, но эта опция, похоже, отсутствуетUIDocument
.