Je dois extraire les fichiers de l'archive zip. Une partie de ces fichiers peuvent être des liens symboliques. Contenu de ce fichiers ressemble ../../../Braintree/BraintreeUI/Public/UIColor+BTUI.h
Ma bibliothèque Décompressez (ZipZap) ont des propriétés de fichiers, donc je sais toujours - est ce fichier est un lien symbolique, ou il est un fichier régulier:NSFileManager créer un lien symbolique avec le contenu
... // open and read archive, list entries
ZZArchiveEntry *entry = ... // get one entry
BOOL isSymlink = (entry.fileMode & S_IFLNK) == S_IFLNK;
Donc, si isSymlink == YES
ma tâche est pour créer un fichier de lien symbolique et écrire le contenu de l'élément d'archive dans ce fichier. J'utilise ce code:
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];
Mais comme résultat que je reçois un fichier régulier dans le Finder. Lorsque j'extrais mon archive avec l'utilitaire d'archivage Mac intégré, j'obtiens des liens symboliques corrects.
J'essaie aussi cette astuce pour changer le type de fichier après création du fichier:
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];
Il n'y a pas d'erreurs, mais dictionnaires originaux et mis à jour sont les mêmes:
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;
Quel est le bon façon de créer (ou mettre à jour) les attributs de fichiers et le type de fichier avec NSFileManager, en utilisant la valeur archive entry.fileMode
? Dans mes tests c'était 41453
.
Merci. Je prends DestinationPath de la chaîne fileData, tout fonctionne correctement comme il se doit. (Avec le chemin relatif comme dans ma question) –