NSFileManager 创建带有内容的符号链接

Posted

技术标签:

【中文标题】NSFileManager 创建带有内容的符号链接【英文标题】:NSFileManager create symbolic link with content 【发布时间】:2017-04-25 22:20:08 【问题描述】:

我需要从 zip 存档中提取文件。该文件的一部分可以是符号链接。该文件的内容看起来像../../../Braintree/BraintreeUI/Public/UIColor+BTUI.h我的解压缩库(ZipZap)有文件属性,所以我总是知道 - 这个文件是符号链接,还是常规文件:

... // open and read archive, list entries
ZZArchiveEntry *entry = ... // get one entry
BOOL isSymlink = (entry.fileMode & S_IFLNK) == S_IFLNK;

所以,如果isSymlink == YES 我的任务是创建符号链接文件并将存档项目内容写入该文件。我使用此代码:

NSData *fileData = [entry newDataWithError:nil]; // valid NSData, contents as described above
NSString *filePath = ... // correct and writable path
NSDictionary *attributes = @NSFileType:NSFileTypeSymbolicLink;

[[NSFileManager defaultManager] createFileAtPath:filePath contents:fileData attributes:attributes];

但结果我在 Finder 中获得了常规文件。当我使用内置的 Mac 存档实用程序提取我的存档时 - 我得到了正确的符号链接。

我也尝试使用此技巧文件创建后更改文件类型:

NSDictionary *original = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];

NSMutableDictionary *newProperties = [original mutableCopy];
newProperties[NSFileType] = NSFileTypeSymbolicLink;

[[NSFileManager defaultManager] setAttributes:newProperties ofItemAtPath:filePath error:nil];

NSDictionary *updated = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];

没有错误,但原版和更新后的词典是一样的:

NSFileCreationDate = "2017-04-25 22:09:04 +0000";
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileHFSCreatorCode = 0;
NSFileHFSTypeCode = 0;
NSFileModificationDate = "2017-04-25 22:09:04 +0000";
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName = wind;
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 55;
NSFileSystemFileNumber = 43896483;
NSFileSystemNumber = 16777217;
NSFileType = NSFileTypeRegular;

使用存档entry.fileMode 值使用 NSFileManager 创建(或更新)文件属性和文件类型的正确方法是什么?在我的测试中,它是41453

【问题讨论】:

【参考方案1】:

您需要使用createSymbolicLinkAtPath:withDestinationPath:error: 创建符号链接,不能创建常规文件并将其转换为链接。高温

【讨论】:

谢谢。我从 fileData 字符串中获取 DestinationPath,一切正常。 (在我的问题中使用相对路径)

以上是关于NSFileManager 创建带有内容的符号链接的主要内容,如果未能解决你的问题,请参考以下文章

ios NSFileManager 用法详解

如何使用 NSFileManager 删除目录及其内容

iphone NSFilemanager 没有创建文件

NSFileManager 无法创建文件

在带有符号链接的可执行文件中使用相对路径

NSFileManager 线程安全