Infos sur un fichier

tabliertablier Membre
21:38 modifié dans API AppKit #1
(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!

Réponses

  • CoreCore Membre
    21:38 modifié #2
    Quel type d'infos te faut il ?
  • tabliertablier Membre
    21:38 modifié #3
    j'ai besoin des informations (en franglais):
    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+
  • aranaudaranaud Membre
    21:38 modifié #4
    Essaie avec cette ligne :

    [dictionnaire setDictionary:[[NSFileManager defaultManager] fileAttributesAtPath:cheminDuFichier traverseLink:YES]];
    
  • mai 2005 modifié #5
    Tu trouveras aussi quelques infos dans la classe NSWorkspace. Les méthodes suivantes devraient t'intéresser:
    [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.
  • CoreCore Membre
    21:38 modifié #6
    dans 1115619845:

    j'ai besoin des informations (en franglais):
    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+


    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
  • tabliertablier Membre
    21:38 modifié #7
    Merci de vos réponses.
    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!
  • BruBru Membre
    21:38 modifié #8
    dans 1115645166:

    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).

    .
  • CoreCore Membre
    21:38 modifié #9
    Je rebondi sur ce topic pour savoir s'il est possible des infos sur un Volume plutôt que sur un fichier (date creation, espace dispo, etc..)
  • tabliertablier Membre
    21:38 modifié #10
    Pour un chemin donné, "fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory" permet de savoir si l'on a affaire à  un dossier et s'il existe. Et je pense que "fileAttributesAtPath:(NSString *)path traverseLink:(BOOL)flag" devrait donné les attributs du dossier (pas de certitude).

    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.
  • mpergandmpergand Membre
    21:38 modifié #11
    Salut à  tous,


    Vous me dites que "Cocoa" est incomplet et qu'il faut que je retourne a "carbon"! Very surprising, isnt it!

    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
  • CoreCore Membre
    21:38 modifié #12
    Mais la bible pour avoir toutes les infos sur les fichiers/volumes, c'est MoreFilesX


    merci !!!! c'est vraiment ce qu'il me fallait !!!  :p
  • tabliertablier Membre
    21:38 modifié #13
    Merci pour le tuyau (à˜ 12).

    Eventuellement quelqu'un sait-il comment on copie un fichier sans changer ses dates de création et modification? (carbon encore une fois?)

    A+
Connectez-vous ou Inscrivez-vous pour répondre.