2013-03-23 2 views
0

Я делаю байт для байт-копии файла в MacOS, и из-за этого я теряю все данные заголовка файла о файле (т. Е. LastModified, CreateDate и т. Д.).Какие данные заголовка файла должны быть переданы во время копирования?

Я не хочу использовать copyItemAtURL, потому что он не дает мне мелкозернистого элемента управления, в котором я нуждаюсь, в частности, чтобы разрешить отмену копии, обновления прогресса, возможность приостановки и т. Д. Но я НЕ хочу имитировать то, что copyItemAtURL делает с данными заголовка файла - я просто точно не знаю, что это такое.

Я знаю, как получить основы, захватив NSURLContentModificationDateKey, NSURLCreationDateKey из исходного файла и применив его к целевому файлу.

Мой вопрос: что еще я должен гарантировать, передается из исходного файла в новый файл? Этикетки? Информация о безопасности?

Любые советы приветствуются!

EDIT

Я нашел некоторые общие рекомендации о метаданных в яблоневых документы here, но это действительно не крикнуть, какие метаданные должны быть заполнены при каких условиях.

+0

Файлы могут иметь любое количество атрибутов и других частей метаданных, что вам нужно? –

+0

Мне нужно уметь приостанавливать/возобновлять/отменять, обновлять ход и т.д. байт для байта. Это особенно важно для больших файлов. –

ответ

2

Это было использовано API FSCopyObjectAsync в старом файловом менеджере на основе углерода, который, к сожалению, устарел с OS X 10.8 (иначе Mountain Lion).

Документация для FSCopyObjectAsync направляет читателю либо copyItemAtURL:toURL:error, либо функцию POSIX copyfile. Последний, похоже, предлагает вам контроль.

Примечание: у меня нет личного знакомства с copyfile(); YMMV.

Вообще говоря, использование API более высокого уровня, которые предоставляются специально для копирования файлов, будет лучше, чем перенос собственных с использованием примитивов нижнего уровня. Они не только значительно уменьшат количество кода, который вы должны написать; они также будут надежно защищать ваше приложение, потому что все, что добавляется в файловую систему в какой-то будущей версии ОС, по всей вероятности будет автоматически поддерживаться.

Для полноты, вот статья (письменная предварительная версия), в которой объясняется, как выполнить file-copy-with-progress-indicator с использованием FSCopyObjectAsync.

+0

Согласен, более высокий уровень лучше, если он выполняет свою работу. Я использовал copyItemAtURL в прошлом, но это просто не кажется разумным для файлов размером с GB +, которые блокируются и не могут быть легко отменены. FSCopyObjectAsync будет полностью работать, но не может использоваться, потому что они устарели, и в AppStore существует ограничение на устаревший код, как я понимаю. Copyfile() выглядит немного сложнее ... рок, встретить трудное место. –

Смежные вопросы