NSFileManager 中的错误(实例方法是遍历符号链接)
Posted
技术标签:
【中文标题】NSFileManager 中的错误(实例方法是遍历符号链接)【英文标题】:Bug in NSFileManager (instance method is traversing symbolic link) 【发布时间】:2012-03-21 12:36:04 【问题描述】:我正在使用copyItemAtPath:toPath:error:
进行复制操作。来自文档:
符号链接不被遍历,而是被复制
但此方法正在遍历符号链接并复制 ln -s
(在 10.5 中)创建的符号链接的原始内容。kMDItemFSFinderFlags
对于 ln -s
创建的别名为零。attributesOfItemAtPath:error: returns NSFileType = NSFileTypeSymbolicLink
来自What's the difference between alias and link?
别名包含两条信息: 它链接到的文件,以及它链接的文件的路径和文件名 到。
如果重命名或移动文件,然后使用路径创建新文件 和文件最初具有的文件名,然后是链接的任何别名 到原始文件的链接现在链接到新文件。
但是,如果您重命名或移动文件而不替换它,然后 调用别名,别名将更新为指向新路径并 文件名,使用唯一标识符。
另一方面,符号链接不包含唯一的 文件的标识符,如果文件是 重命名或移动,而不是用相同路径的文件替换,并且 文件名。
当我使用
创建别名时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】:如果这确实是一个错误,请尝试改用 copyfile()
(C 函数,手册第 3 节)。
【讨论】:
如果文件是符号链接 (4KB),则 copyfile() 在 10.5 中复制零 KB。在 10.6 中它工作正常。 copyfile((const char *)[srcpath UTF8String], (const char *)[destpath UTF8String], state, COPYFILE_DATA | COPYFILE_XATTR | COPYFILE_STAT | COPYFILE_ACL | COPYFILE_NOFOLLOW_SRC); 奇怪,copyfile() 处理符号链接,提示问题的原因是别的…… copyfile() 是否返回错误结果?errno
的值是多少?您可以尝试使用destinationOfSymbolicLinkAtPath:error:
(readlink() 的包装器)和createSymbolicLinkAtPath:withDestinationPath:error:
(symlink() 的包装器)自己复制链接 - 随时检查结果。以上是关于NSFileManager 中的错误(实例方法是遍历符号链接)的主要内容,如果未能解决你的问题,请参考以下文章