Bonjour;
Je souhaiterai recupérer tout les fichiers textes d'un repertoire (en ignorant les sous repertoires et les fichiers n'etant pas des .txt)...
Comment dois je faire? ( Fichier = readdir(Repertoire) )
Merci pour l'aide
Version imprimable
Bonjour;
Je souhaiterai recupérer tout les fichiers textes d'un repertoire (en ignorant les sous repertoires et les fichiers n'etant pas des .txt)...
Comment dois je faire? ( Fichier = readdir(Repertoire) )
Merci pour l'aide
opendir(), une boucle de readdir(), et tu vérifies chaque nom de fichier...
Ne pas oublier le closedir() à la fin...
ben oui mais comment verifier que je ne recupere que les fichier txt...car aujourd'hui je recupere tout meme les repertoires
Ne pas oublier de convertir le nom en uppercase ou lowercase pour avoir une comparaison indépendante de la casse...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /*---------------------------------------------------------------------------- Fonction endsWith(): fonction pour tester si une chaîne se termine par une autre Paramètres: toTest [in] Chaîne à tester end [in] La Fin voulue Retourne: Une valeur non-nulle si toTest se termine par end. ----------------------------------------------------------------------------*/ int endsWith(char const *toTest, char const *end) { size_t endLength = strlen(end); size_t toTestLength = strlen(toTest); int bResult = 0; if(toTestLength >= endLength) { char const * endToTest = toTest + toTestLength - endLength; if(strcmp(endToTest, end)==0) bResult = 1; } return bResult; }
bonjour,
oui c est sur que readdir te liste tout les fichiers (les repertoires sont des fichiers, speciaux certes, mais fichiers). Apres a toi de traiter que ceux qui t interessent ou pas.
Par contre les extensions de fichiers n ont pas enormement de sens sous unix.
Si quelqu'un a eu la bêtise de nommer un répertoire sous la forme « xxxxx.txt », tu peux vérifier la nature du fichier avec stat() et en vérifiant si le fichier que tu vérifies est bien un fichier ordinaire avec la macro S_ISREG(). -> man 2 stat.
C'est tout ce que tu peux faire à ce stade. Les reconnaissances « heuristiques » accomplies par la commande file, par exemple, sont menées en analysant le contenu du fichier.
Bon courage.
eh non...
suffit de vouloir faire un print et tu t'en apercevras...
Il y a des 0 (NULL), des backspaces, tout un tas de code qui sont interpétés...
C'est bien pour ça qu'il y a les fonctions isascii() etc..
J'ai retrouvé le thread en question :
http://www.developpez.net/forums/d57...binaire-texte/
:D
C'est donc bel et bien un fichier binaire qui respecte une certaine forme. Plus précisément, c'est censé être un fichier dont les octets ne contiennent que des valeurs correspondant à des caractères affichables, donc ceux de l'ASCII standard ou étendu, et des retours à la ligne, tout le reste étant à priori considéré comme illégal.
« binaire » n'est que la plus basse forme de structuration d'un fichier. Quand il n'y a plus rien à reconnaître, on considère que l'information utile est à examiner directement au niveau du bit.
Merci !!
Je rajouterai juste une chose, un fichier toto.txt généré par notepad sous windows qui contient du texte en unicode et qui commence par la balise <ff><fe>. Est ce un fichier texte oui ou non. Je ne sais pas bien répondre. Oui c'est du texte parce que ce que j'ai écrit dedans est du texte. Non ce n'est pas du texte car on va trouver des caractères bizarres dedans (ne serait ce que la balise <ff><fe> indiquant que ce fichier contient normalement de l'unicode).
Donc dire si un fichier est texte ou non, ce n'est pas facile. J'ai bien lu le post cité, l'heuristique présenté est intéressant. Je veux bien croire que cette heuristique se trompe rarement (taux de réussite de 99%) mais est ce que c'est suffisant et qu'on peut admettre une erreur de 1%.
Autre chose, si tu as un répertoire avec 100 fichiers de 1GO dedans (répertoire de logs par exemple), lire 100 GO, cela va être un peu long pour dire : "ce sont tous des fichiers texte".
Ce sera long, mais tester les extensions de fichiers sous unix n a pas plus de sens...
Dans ce cas que faire d autre ?
Que fait le programme file ?
Je crois qu'il fait un heuristique sur le premier KO ou un truc du genre, non?