Я работаю над программой, которая копирует файлы и папки из точки a в точку b, по большей части она довольно проста. Я решил использовать копировать файл функция для фактического копирования, потому что она обрабатывает все метаданные. По какой-то причине есть много файлов, которые он не может скопировать, даже если я запускаю его как root. Пример файла, который не может быть скопирован /usr/share/emacs/22.1/etc/BABYL
Я не знаю, почему это так. Сам файл хороший, я могу зайти в него в Finder, скопировать и вставить его, как любой другой обычный файл. Есть ли какие-то проблемы с разрешениями, которые мне не хватает? Кажется, это делается только для системных файлов, но не для всех. Это соответствует тому, что он будет и не будет копировать.
Фактический вызов функции выглядит следующим образом
copyfile(filePath, destPath, gState,
COPYFILE_DATA | COPYFILE_ACL | COPYFILE_STAT | COPYFILE_XATTR);
Ошибка, которую я получаю, не очень полезна, просто ошибка ввода-вывода 5.
Есть ли что-то, что мне не хватает, что заставляет его не работать для некоторых файлов? Или copyfile просто не будет делать некоторые вещи? Существуют ли более эффективные способы, чем copyfile, для копирования файлов и всех их атрибутов / метаданных?
Пожалуйста, не предлагайте другие программы, которые копируют файлы, я здесь не для этого.
Спасибо!
Вам придется копать глубже, чтобы найти свою проблему, к счастью, вы можете копать внутри copyfile()
сам. Apple предоставляет полный источник который вы можете связать в своем коде, а затем проследить через него, чтобы найти проблему.
Замечания: Возможно, вам придется немного подправить исходный код, чтобы он скомпилировался, но это достаточно просто сделать. Однако, если вы попытаетесь застрять, задайте еще один вопрос с деталями того, что вы пробовали и что пошло не так, возможно, кто-то вам поможет.
НТН