Проблемы копирования файлов — NSFileManager Objective C

Странное и нелогичное поведение методов копирования файлов

copyItemAtURL:toURL:error:
copyItemAtPath:toPath:error:
И не только...

При копировании файлов существуют как минимум две проблемы:

Первая проблема: при копировании файлов, существующие файлы в месте назначения будут молча перезаписаны (хотя в описании метода сказано, что операция копирования будет остановлена с ошибой)! С каталогами всё ровно наоборот, работает, как заявлено.

Чтобы избежать первой проблемы (если нельзя перезаписывать существующие файлы), хочешь, не хочешь, а придется сначала проверять файл назначения на существование (fileExistsAtPath:) или вести некую базу данных, где отмечать по каждому файлу, что надо делать, а что не надо.

Вторая проблема: ОС некорректно различает файлы, у которых одинаковые имена, где одно имя файла с расширением, а другое такое же, но без расширения. В таком случае мы получаем неожиданные результаты и нелогичное поведение некоторых методов, предназначенных для копирования файлов. В одном случае ОС считает одинаковыми имена файлов default = default.doc, в другом случае, ОС считает их разными. Такой необычный и непонятный результат получается в зависимости от того, какой файл оказался в файловой системе первым.

Со второй проблемой сложнее.. Существующий файл в директории с расширением (например .doc) теряет это самое расширение, если в туже директорию копируется новый файл с тем же именем, но без расширения. Запутанно, не так ли? К сожалению, так сделала Apple..

Например, в каталоге Documents лежит один файл с именем default.doc. Если в этот же каталог скопировать другой файл с таким же именем, но которое не содержит расширения, то есть default, то мы ожидаем, что в каталоге Documents появится второй файл с именем default. Однако, на самом деле в каталоге пропадет файл default.doc , он заменится новым файлом с именем default.

Но если помещать эти файлы в директорию в обратной последовательности, то в итоге будет два файла, как и должно было быть. Но на этом сюрпризы не заканчиваются и мы возвращаемся к первому пункту...

Я понимаю стремление Apple сделать процедуру копирования файлов наиболее быстрой... На существование проверяются только папки, ведь их количество как правило значительно меньше, чем файлов. Это конечно имеет некоторый смысл как по скорости, так и по количеству действий для пользователя , но это неожидаемое поведение от ОС и есть риск потерять (перезаписать) важные файлы. Разработчик должен учитывать такое поведение NSFileManager при разработке своего приложения.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *