Ошибка в NSFileManager (метод экземпляра пересекает символическую ссылку) - PullRequest
2 голосов
/ 21 марта 2012

Я использую copyItemAtPath:toPath:error: для операции копирования. Из документации:

Символические ссылки не просматриваются, но сами копируются

но этот метод перебирает символическую ссылку и копирует оригинальное содержимое для символических ссылок, созданных ln -s (в 10.5).
kMDItemFSFinderFlags равно нулю для псевдонима, созданного ln -s.
attributesOfItemAtPath:error: returns NSFileType = NSFileTypeSymbolicLink

С В чем разница между псевдонимом и ссылкой?

Псевдоним содержит две части информации: уникальный идентификатор файл, на который он ссылается, а также путь и имя файла, на который он ссылается к.

Если вы переименуете или переместите файл, а затем создадите новый файл с путем и имя файла, который изначально был у файла, затем любой псевдоним, связанный с к исходному файлу теперь ссылки на новый файл.

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

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

когда я создаю псевдоним, используя

tell application "Finder"
    make new alias at POSIX file "/Users/test/" to POSIX file "/Applications/Safari.app"
end tell

copyItemAtPath:toPath:error: работает нормально и kMDItemFSFinderFlags = 33792.

attributesOfItemAtPath:error: returns NSFileType = NSFileTypeRegular; 

Может кто-нибудь помочь мне?

1 Ответ

1 голос
/ 21 марта 2012

Если это действительно ошибка, попробуйте использовать copyfile() (функция C, man section 3).

...