2015-05-15 7 views
3

Я работаю над программой, которая копирует файлы и папки из точки a в точку b, это довольно просто по большей части. Я решил использовать функцию copyfile для выполнения фактического копирования, поскольку он обрабатывает все метаданные. По какой-то причине есть много файлов, которые он не может скопировать, даже если я запускаю его как root. Файл примера, который не может быть скопирован, - /usr/share/emacs/22.1/etc/BABYLcopyfile function on Mac OS X

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

Фактический вызов функции выглядит следующим образом copyfile(filePath, destPath, gState, COPYFILE_DATA | COPYFILE_ACL | COPYFILE_STAT | COPYFILE_XATTR); Ошибка я получаю не очень полезно, просто ошибка ввода-вывода 5.

Есть ли что-то мне не хватает, что заставляет его не работать для некоторых файлов? Или скопируйте файл, чтобы он не делал certian? Есть ли лучшие способы, чем copyfile для копирования файлов и всех их атрибутов/метаданных?

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

+0

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

+0

Есть 841 файл, который не удается скопировать, это когда я пытаюсь скопировать весь диск. Это непротиворечиво в том, что не удается скопировать. Если я вхожу в консоль, появляются сообщения об ошибках, которые говорят «имя_пользователя при открытии ошибки ввода входного файла». Я мог понять это, если бы это был просто диск, но я могу перейти к этим файлам в Finder и скопировать/вставить их просто отлично, и оба диска проходят тест SMART без ошибок. – ATSOTECK

ответ

1

Вам нужно будет копать глубже, чтобы найти вашу проблему, к счастью, вы можете копать внутриcopyfile() себя. Apple предоставляет full source, который вы можете связать в свой код, а затем проследить его, чтобы найти проблему.

Примечание: Возможно, вам придется немного подкорректировать источник, чтобы его можно было скомпилировать, но для этого достаточно просто. Однако, если вы попытаетесь застрять, задайте еще один вопрос с подробностями о том, что вы пробовали и что случилось, кто-то, вероятно, вам поможет.

HTH

+0

Спасибо, я попробую это и посмотрю, смогу ли я получить от него какие-либо полезные ошибки. – ATSOTECK