En fin de compte, je veux parcourir les fichiers et les sous-répertoires d'un dossier et écrire quelque chose à tous les fichiers que je trouve qui ont une certaine extension (.wav dans mon cas). Lors de la boucle Comment puis-je dire si l'article que je suis à est un répertoire? p>
4 Réponses :
Opendir et ReadDir (sur UNIX), voici un exemple:
http: //opengroup.org/onlinepubs/007908775/xsh/readdir.html p>
ou FindFirstFile sur Windows p>
Vous pouvez également utiliser la coque assez facilement: p>
Oups, j'ai oublié de dire que je fais cela sur Windoze aussi.
Basé sur votre mention de .wav code>, je vais deviner que vous écrivez le code pour Windows (qui semble être où
*. WAV code> Les fichiers sont les plus commun). Dans ce cas, vous utilisez
FindFirstFile code> et
FindNextFile code> pour traverser les répertoires. Celles-ci utilisent une structure
win32_find_data code>, qui a un membre
dwfileattributes code> qui contient des indicateurs en disant les attributs du fichier. Si
Dwattributes & File_Attribute_Directory code> n'est pas zéro, vous avez le nom d'un répertoire. P>
Oui, je le fais sur Windows. Mon C est vraiment rouillé, n'a pas été programmé en C pendant quelques années. J'essayais d'utiliser Dirent.h, mais je ne pense pas qu'il offre une façon de dire si l'élément est un répertoire ou non. Vous ne pouvez pas trouver un bon exemple de FindFirstFile de Google
Cette page montre comment les utiliser (en VB, mais la traduction to c doit être plus ou moins simple en avant): support.microsoft.com/kb/185476 . Notez que vous voudrez peut-être aussi réfléchir à la façon dont vous avez la main sur les jonctions NTFS, c'est-à-dire de savoir s'il faut les suivre ou non, et si vous faites comment éviter les boucles sans fin.
Voici comment vous le faites (tout est de la mémoire de sorte qu'il peut y avoir des erreurs): afin que vous puissiez appeler cela comme p> Pour trouver tous les fichiers * .wAV en C: \ Windows et ses sous-répertoires. p> techniquement, vous ne devez pas faire deux appels FindFirstFile (), mais je trouve les fonctions de correspondance des motifs Microsoft fournit (pathmatchfileSpec ou autre) ne sont pas aussi compétents que FindFirstFile (). Bien que pour "* .wav" ça irait probablement bien. P> p>
Outre un couple de type mineur, il fonctionne très bien. Code> @Neilweicher Il y a un bouton d'édition afin que vous puissiez réparer ces fautes de frappe mineures.
Très utile. J'avais quand même, un débordement de pile car il ajoutait toujours "". au chemin et retourner au même chemin = boucle sans fin. P>
Ajout de cela résolu: P>
// a trouvé un sous-répertoire; se recueillir
Pathcommine (Szfullptern, LPFolder, FindFileData.cfilename);
FindFilesRecursivement (Szfullpattern, LPTattern);
Si (FindFileData.cfilename [0] == '.') Continuer; Code> P>
Cela exclurait Tous les annuaires i> commençant par une période (y compris des répertoires cachés provenant de * Nix Systems).
Les répertoires de traversée dépendent du système d'exploitation. Vous devez donc probablement nous dire quel OS vous utilisez. Il existe certaines bibliothèques indépendantes du système d'exploitation. Si vous utilisez l'un d'entre eux, nous devrons savoir qui donner une bonne réponse.
Est-ce une plate-forme UNIX-Y (MAC, etc.) ou Windows, ou quelque chose d'autre entièrement? De nombreuses plates-formes prendront en charge les normes POSIX ( ROBOT.MBHS.EDU/WordPress/2009/... ), mais il aura également leur propre mode de faire, ESP Windows (FindFirstFile / FindNextFile)
Je ne comprends toujours pas cela pour travailler comment je veux. FindFirstFile émet le nom du répertoire dans lequel je suis dans le répertoire, pas le premier fichier dans le répertoire si je laissez le suivi /. Si je mettez le traction / c'est lui donnant un nom de fichier étrange (AAAAA-LIBVC ...). En outre, les deux fois FINTNEXTFILE ne reviendra pas de valeur du tout