France Hardware : Forums de discussion - Découvrez notre nouveau comparateur d'offres Internet
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
29 521 membres enregistrés - 2 069 420 posts - 122 057 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Sujets divers
                [C] lire tout les fichiers d'un repertoire
76 connectés(record : 2799 le 29 May 2016 - 15 h 34)

Vous devez vous connecter pour répondre au topic.
[C] lire tout les fichiers d'un repertoire

Usopp


Messages : 7
Inscrit le 16/10/05
Ville : lyon
Non connecté
  Posté le 25 December 2005 - 15 h 42 m 33 s
bonjout ;)
alors en faite j'essaye de faire un prog qui :

-je tape 5454664 dans mon prog et il va aller dans le repertoire c:\\test qui contient X fichiers
-il va ouvrir tous les fichiers pour comparer les 7 premier caracteres pour voir si le nombre est bien 5454664
-si c'est le cas il va prendre le fichier et le couper coller dans un autre rep

je galere

j'arrive a listé tout les fichiers du repertoire mais j'arrive pas a les ouvrir en lecture pour comparer pendant que je les listent :nrv:

si quelqu'un a des bout de codes ou autre je suis prenneur
merci bcq d'avance :hello:




Woofy
Totalement inutile, complètement indispensable

Messages : 31 551
Inscrit le 11/01/02
Ville : Lyon
Non connecté
  Posté le 25 December 2005 - 23 h 23 m 35 s
Bah pour les ouvrir, tu fait un read non ?

Tu fait une boucle while avec un readdir, et tu récupère la structure dirent de ton readdir :


struct dirent
{
long d_ino; /* inode number */
off_t d_off; /* offset to this dirent */
unsigned short d_reclen; /* length of this d_name */
char d_name [NAME_MAX+1]; /* file(1,n) name (null-terminated) */
}


A partir de la, dans ta boucle, tu n'a qu'a faire un open sur le nom du fichier, un read sur 7 caractères, et un strcmp par exemple, ou ta fonction de comparaison. En fait tu veut vérifier le nombre magique c'est ça (il est pas sur 2 octets seulement en général ?) ?




Usopp


Messages : 7
Inscrit le 16/10/05
Ville : lyon
Non connecté
  Posté le 26 December 2005 - 00 h 11 m 05 s
> #include <stdio.h>
> #include <stdlib.h>
> #include <dirent.h>
>
> int main()
> {
> DIR *rep ;
> struct dirent *file ;
>
> rep = opendir ("c:test") ;
> if (rep != NULL)
> {
> while (file = readdir(rep))
> printf ("%sn", file->d_name) ;
> (void) closedir (rep) ;
> }
> return 0;
> }

avec ca
j'ai essayé plein de choses pour ouvrir en meme temps les fichier et faire la comparaison pendant le listage mais chaque fois ca marché pas erreur de compil ou autre .. :nrv:
bref si ta une idee comment inserer l'ouverture de fichier pendant le listage ca serait top ! :yes:

euh non je veux pas verifier le nombre magic juste faire un prog qui me simplifi la vie au boulot ;)

merci


Message édité 2 fois, la dernière par Usopp le 26 December 2005 - 00 h 16.


Woofy
Totalement inutile, complètement indispensable

Messages : 31 551
Inscrit le 11/01/02
Ville : Lyon
Non connecté
  Posté le 26 December 2005 - 12 h 06 m 09 s
    Code     
 1. int check_file(char *name)
 2. {
 3. int fd;
 4. int res;
 5. char buf[7];
 6. 
 7. if (!(fd = open(name, O_RDONLY, NULL))
 8. return (-1);
 9. if (read(fd, buf, 7))
10. {
11. res = strcmp(buf, 5644747);
12. }
13. return (-1);
14. close(fd);
15. return (res)
16. }


Avec une fonction dans le genre a la place de ton printf dans le while, ça peut peut-être marcher. Bon faudra adapter pour la comparaison, mais l'idée y est.
Il faudrait que tu nous dise ce qui ne compile pas, ou qui ne marche pas, et avec quel code.




bernie38
Waldorf (le pote à Statler)

Messages : 11 452
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 26 December 2005 - 14 h 56 m 59 s
mouais. Moi j'ai Visual C++ 6.0, et quand j'essaie de compiler le bout de code donné par Usopp, j'ai ceci :


d:mes projetsexpldirexpldir.c(3) : fatal error C1083: Cannot open include file: 'dirent.h': No such file or directory

ah dommaaaaaaaaaaage ! et comment qu'on fait alors ?
Tout ça pour dire que c'est compiler dependant. C'est con hein ? Mais bon, y'a d'autres fichiers d'entete qui le permettent, heureusement. Chaque implémentation de compilo fait comme bon lui semble, dès lors que le standard C est respecté. Le reste ça s'appelle des extensions.

EDIT : je crois bien que dirent c'est POSIX, ça explique qu'on le trouve sur pas mal de plate-formes.


Message édité 1 fois, la dernière par bernie38 le 26 December 2005 - 15 h 05.

La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Petit_PimoOosE
rsqrtps & pshufb

Messages : 4 617
Inscrit le 15/06/03
Ville : Montréal
Non connecté
  Posté le 26 December 2005 - 15 h 42 m 58 s
Il me semble que le repertoire n'est pas une structure de donnee connue par le C, donc c'est absent de la bibliotheque standard... Et il faut donc passer par des bibliotheques dependentes, ou compiler avec cygwin ou mingw.
Sous VC++, la solution que je connais est d'utiliser les fonctions FindFirst/FindNext/FindClose.

P.S. Bernie, je ne crois pas qu'on puisse parler de C ou C++ sous VC++ 6.0 :-p



Huile de fraise.

bernie38
Waldorf (le pote à Statler)

Messages : 11 452
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 26 December 2005 - 16 h 09 m 22 s
tout à fait, le C ne connait que des flux. Attention, cygwin et mingw ne sont pas des compilos mais intègrent gcc si je me souviens bien.
Et sous VC++, il faut en effet utiliser les fonctions que tu cites.

Pourquoi dis-tu qu'on ne peut pas parler de C ou C++ sous VC++ 6.0 ??? Je crois qu'il sait compiler les deux, il suffit d'avoir un source avec extension .c et bien sûr n'utiliser que des instructions C. Non ?



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Petit_PimoOosE
rsqrtps & pshufb

Messages : 4 617
Inscrit le 15/06/03
Ville : Montréal
Non connecté
  Posté le 26 December 2005 - 19 h 16 m 48 s
Mmh... Je crois qu'on peut dire que Mingw32 est un port de gcc, mais c'est vrai que pour cygwin, c'est plus ambigu...

Quant à VC++ 6, c'était plus une boutade sur son respect du standard C++ :P (au passage, notez que le compilo VC++ 2k3 et l'IDE VC++ express 2k5 + compilo sont gratuits).



Huile de fraise.

iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 26 December 2005 - 22 h 45 m 32 s
[HS]
Cygwin est bien un environnnement plus global et donne acces entre autres a gcc ..
---





Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


Woofy
Totalement inutile, complètement indispensable

Messages : 31 551
Inscrit le 11/01/02
Ville : Lyon
Non connecté
  Posté le 28 December 2005 - 17 h 30 m 43 s
Personne m'a dit qu'il ne compilais pas avec gcc :na: :P




Page genérée en 0.1426 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL | Actualité ADSL | Deligo | Appareil photo | Commande Au Volant
Creative Commons
Message Boards and Forums Directory