[Résolu] Compter les fichiers d'un répertoire
Bonsoir,
Voilà plusieurs jours que je suis aux prises avec le FileManager, que j'utilise les enumeratorAtPath, contentsOfDirectoryAtPath et autres attributesOfItemAtPath, sans compter les jonglages entre NSURL et NSString, j'en passe et des pires, tout ça pour ne pas parvenir au résultat voulu:
Dans une hiérarchie de répertoires et de documents, je veux obtenir la liste des répertoires qui contiennent uniquement des documents (donc en fait le dernier niveau de la hiérarchie). Sont exclus les répertoires vides ou les répertoires qui contiennent d'autres répertoires.
Existe-t-il un moyen simple de faire cela, en démarrant de la liste d'un répertoire (par exemple le dossier Documents)? Peut-on trier à l'aide de prédicats, si oui lesquels? Comment zapper les fichiers .DS_Store?
Croyez bien que j'ai lutté avant de poser la question. Je dois mal m'y prendre... ou alors c'est vraiment compliqué?
Merci d'avance.
Réponses
As tu essayé avec ça, qui permet d'exclure fichiers cachés et | ou sous-répertoires et qu'est ce qui n'a pas fonctionné ?
Sinon, dans les moyens "simples" tu as aussi une méthode (relativement) méconnue de NSString :
Si tous tes fichiers ont un préfixe commun ..
Tout est faisable. Essaye le petit logiciel joint, même si ce n'est pas exactement ce que tu cherches.
Bonjour laudema,
Le moins que l'on puisse dire, à voir les occurrences sur la toile, c'est que le système de fichiers n'est pas évident à comprendre. Si je travaillais par glisser-déposer, je me simplifierais sans doute la vie, mais je travaille par... sélection dans le finder (je ne te raconte pas pour la récupérer via SBElementArray)...
Le gros piège que je me suis tendu à moi-même, et dans lequel je suis naturellement tombé, est d'utiliser
pour "simplifier" la construction des chemins d'accès. Bad, bad idea indeed. Du coup, pour copier un fichier d'un répertoire à l'autre, je ne savais plus où j'en étais... J'en suis donc revenu à des paths/url/NSURL/NSString (...) reconstruits entièrement. Ca donne des lignes de code trèèès longues, je déteste ça.
J'en suis à dériver NSObject pour créer des énumérateurs et isoler ce qui ne marche pas. Dernier essai:
Faire un test du genre if (![fileDic objectForKey:@NSFileType]) est vraiment minable, d'autant plus que ces fichus .DS_Store passent entre les gouttes, compliquant le dénombrement.
@tablier : sans le source, je ne vois pas ce que cherche à faire "Répertoire"...
Ben justement, en plus tu veux retourner un enumerator donc j'utiliserais les méthodes éponymes de NSFileManager enumeratorAtPath ou enumeratorAtURL qui retournent un enumerator et dont les options NSDirectoryEnumeration-skipSubdirectoryDescendants - SkipsPackageDescendant -SkipsHiddenFiles permettent d'éviter les sous répertoires les packages et les fichiers cachés (type .DS_Store)...
Pour revenir sur le méconnu completePathIntoString:
/*475 chemins. 475 n'étaient pas des répertoires et 2 étaient des fichiers cachés*/
Eh bien, je n'avais pas planché assez. Je faisais du myEnumerator.AllObjects et je filtrais moi-même après. Bien utile pour les .count, en effet.
Merci!