Infos sur un fichier
tablier
Membre
(Si la réponse est trivial pour vous, rappelez-vous vos débuts)
Je cherche a obtenir des infos sur des fichiers de n'importe quel type!
Sous ASStudio je connais: "set Fichier_info to (info for alias LeFichier)" qui renvoi un dictionnaire complet des infos, mais je n'arrive pas à trouver l'équivalent en Obj-C. Cela existe-t-il?
Nota: j'ai des réponses partielles avec: "(NSDictionary *)fileAttributesAtPath:(NSString *)path traverseLink:(BOOL)flag" et avec "(BOOL)isFilePackageAtPath:(NSString *)fullPath" Mais cela reste insuffisant!
Je cherche a obtenir des infos sur des fichiers de n'importe quel type!
Sous ASStudio je connais: "set Fichier_info to (info for alias LeFichier)" qui renvoi un dictionnaire complet des infos, mais je n'arrive pas à trouver l'équivalent en Obj-C. Cela existe-t-il?
Nota: j'ai des réponses partielles avec: "(NSDictionary *)fileAttributesAtPath:(NSString *)path traverseLink:(BOOL)flag" et avec "(BOOL)isFilePackageAtPath:(NSString *)fullPath" Mais cela reste insuffisant!
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Date de modification, date de creation, Taille, nature (Kind), File type, File creator, Version longue, Version courte, C'est un dossier, c'est un alias, c'est un package, c'est une application.
Je pensais trouver tout cela dans NSFilemanager, mais ce n'est pas le cas et la recherche dans la documentation est pénible: on trouve ce que font les méthodes, mais pas quelles méthodes utiliser dans une situation donnée!
A+
[tt]- (BOOL)getInfoForFile:(NSString *)fullPath application:(NSString **)appName type:(NSString **)type
- (NSImage *)iconForFile:(NSString *)fullPath
- (BOOL)isFilePackageAtPath:(NSString *)fullPath[/tt]
La première s'utilise comme suis (aFilePath existe déjà ), au cas où tu serais perturbé par les ** dans le prototype:
[tt]NSString* appName, *type;
if ([[NSWorkspace sharedWorkSpace] getInfoForFile:aFilePath application:&appName type:&type]) {
  NSLog(@%@ %@", appName, type);
}[/tt]
Les valeurs prises par type sont décrites dans la page de NSWorkspace.
Pour savoir si tu as un bundle, il faut procéder en deux temps. 1. regarder si c'est un dossier, et 2. si c'est le cas tu testes avec la 3° méthode.
tu pourras obtenir avec fileAttributesAtPath:
NSFileCreationDate
NSFileExtensionHidden
NSFileSize (in bytes)
NSFileModificationDate
NSFileHFSCreatorCode
NSFileHFSTypeCode
NSFileType
NSFilePosixPermissions
NSFileOwnerAccountID
NSFileOwnerAccountName
NSFileGroupOwnerAccountID
NSFileGroupOwnerAccountName
NSFileImmutable
NSFileAppendOnly
NSFileReferenceCount (number of hard links)
NSFileDeviceIdentifier
NSFileSystemFileNumber
Résumons pour notre édification personnelle:
- (NSDictionary *)fileAttributesAtPath:(NSString *)path traverseLink: (BOOL)flag, permet de recuperer: Date de modification, date de creation, Taille, File type, File creator et permet aussi de savoir (NSFileType) si le fichier est un dossier ou un Lien (alias?).
Si c'est un dossier, - (BOOL)isFilePackageAtPath:(NSString *)fullPath permet de savoir si c'est un Package.
- (BOOL)isExecutableFileAtPath:(NSString *)path permet de savoir si c'est une application (exécutable).
Il me manque toujours le "Kind" et les versions courtes et longues et je ne vois pas comment les obtenir!
Pour ce genre d'infos, il faut passer par l'api Lauch Services de Carbon (ici).
.
Pour Bru, puis-avoir quelques détails? J'ai sauté l'épisode "Carbon" car je me suis arreté de programmer 10 ans. Vous me dites que "Cocoa" est incomplet et qu'il faut que je retourne a "carbon"! Very surprising, isnt it!
Amicalement.
Et oui, cocoa n'est qu'une surcouche objet, qui lui même utilise carbon, donc pas d'autre solution que de faire des appels carbon pour certaines fonctions de plus bas niveau.
Comme par exemple ICI pour accéder au FinderFlags
Mais la bible pour avoir toutes les infos sur les fichiers/volumes, c'est MoreFilesX
merci !!!! c'est vraiment ce qu'il me fallait !!!
Eventuellement quelqu'un sait-il comment on copie un fichier sans changer ses dates de création et modification? (carbon encore une fois?)
A+