私はzipアーカイブからファイルを抽出する必要があります。そのファイルの一部にシンボリックリンクを使用できます。それは、ファイルの内容が../../../Braintree/BraintreeUI/Public/UIColor+BTUI.h
マイ解凍ライブラリのように見える(ZipZap)は、ファイルのプロパティを持っているので、私はいつも知っている - このファイルはシンボリックリンクである、またはそれは通常のファイルです:NSFileManagerはコンテンツ付きシンボリックリンクを作成します
... // 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
でした。
ありがとうございます。私はfileData文字列からDestinationPathを取る、すべて正常に動作する必要があります。 (私の質問のような相対的なパスで) –