begin process at 2012 05 29 18:22:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Fichier / Disque

 > 

Pb pour enumerer un repertoire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb pour enumerer un repertoire

mardi 6 mai 2003 à 20:53:06 | Pb pour enumerer un repertoire

salley

Voila, j'essaie de faire un bout de code qui me permet :

-D'enumerer les fichiers de deux repertoire different (ca ca marche),
-Et ensuite mettre le nom de ces fichiers dans 2 variables : name1 et name2 (en considerant qu'il n'y a qu'1 fichier par repertoire) pour pouvoir ensuite les manipuler (ca ca marche pas).

Mais j'ai un Pb, mes 2 variables name1 et name2 ont la meme valeur et j'ai meme des signes bizarre en sortie.

Voila mon code:(si vous pouviez m'aider je vous en serez tres reconnaissant!!!!!)





#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
#include<stdio.h>
#include<string.h>
#include<direct.h>
#include<conio.h>


void tolist(LPCTSTR file);
void tocompare(LPCTSTR file);


char *name1=NULL;
char *name2=NULL;


void main()
{
tolist("C:\\Shapefile\\*.*"); //1er repertoire ds lequel je cherche
tocompare("C:\\Report\\*.*");//2eme repertoire dans lequel je cherche
printf("\n%s",name1);
printf("\n%s",name2);
}

void tolist(LPCTSTR file) //fonction d'enumeration des fichiers d'un repertoire
{
WIN32_FIND_DATA wData;
BOOL re;
HANDLE listing;

listing = FindFirstFile(file, &wData);

re=TRUE;
do
{
re = FindNextFile(listing, &wData);
name1=wData.cFileName;
}
while (re);

}

//----------------------------------------------------------------

void tocompare(LPCTSTR file) //meme fonction d'enumeration avec juste //wData2 et listing2 a la place de wData1 et listing1

{
WIN32_FIND_DATA wData2;
BOOL re;
HANDLE listing2;

listing2 = FindFirstFile(file, &wData2);

re=TRUE;
do
{
re = FindNextFile(listing2, &wData2);
name2=wData2.cFileName;

}
while (re);

}
mardi 6 mai 2003 à 21:43:59 | Re : Pb pour enumerer un repertoire

Kaid

Erreur classique: tu fais pointer tes variables 'name1' et 'name2' sur une adresse mémoire locale aux fonctions 'tolist()' et 'tocompare'. Une variable locale est détruite en sortant de la fonction où elle est déclarée.

Pour résoudre ton problème, tu peux par exemple utiliser la fonction strdup():

name1=strdup(wData.cFileName);

// Utilisation de name1
// ...

// Libération
free(name1);

Kaid - kaid.fr.st

-------------------------------
Réponse au message :
-------------------------------

> Voila, j'essaie de faire un bout de code qui me permet :
>
> -D'enumerer les fichiers de deux repertoire different (ca ca marche),
> -Et ensuite mettre le nom de ces fichiers dans 2 variables : name1 et name2 (en considerant qu'il n'y a qu'1 fichier par repertoire) pour pouvoir ensuite les manipuler (ca ca marche pas).
>
> Mais j'ai un Pb, mes 2 variables name1 et name2 ont la meme valeur et j'ai meme des signes bizarre en sortie.
>
> Voila mon code:(si vous pouviez m'aider je vous en serez tres reconnaissant!!!!!)
>
>
>
>
>

> #include <iostream.h>
> #include <windows.h>
> #include <stdlib.h>
> #include<stdio.h>
> #include<string.h>
> #include<direct.h>
> #include<conio.h>
>
>
> void tolist(LPCTSTR file);
> void tocompare(LPCTSTR file);
>
>
> char *name1=NULL;
> char *name2=NULL;
>
>
> void main()
> {
> tolist("C:\\Shapefile\\*.*"); //1er repertoire ds lequel je cherche
> tocompare("C:\\Report\\*.*");//2eme repertoire dans lequel je cherche
> printf("\n%s",name1);
> printf("\n%s",name2);
> }
>
> void tolist(LPCTSTR file) //fonction d'enumeration des fichiers d'un repertoire
> {
> WIN32_FIND_DATA wData;
> BOOL re;
> HANDLE listing;
>
> listing = FindFirstFile(file, &wData);
>
> re=TRUE;
> do
> {
> re = FindNextFile(listing, &wData);
> name1=wData.cFileName;
> }
> while (re);
>
> }
>
> //----------------------------------------------------------------
>
> void tocompare(LPCTSTR file) //meme fonction d'enumeration avec juste //wData2 et listing2 a la place de wData1 et listing1
>
> {
> WIN32_FIND_DATA wData2;
> BOOL re;
> HANDLE listing2;
>
> listing2 = FindFirstFile(file, &wData2);
>
> re=TRUE;
> do
> {
> re = FindNextFile(listing2, &wData2);
> name2=wData2.cFileName;
>
> }
> while (re);
>
> }

jeudi 8 mai 2003 à 20:06:40 | Re : Pb pour enumerer un repertoire

salley

Dabord trop merci pour ton aide, ca marche maintenant parfaitement, par contre j'ai prefere utiliser des strcpy mais l'erreur viens exeactement de ce que que tu m'as dis.

Je voudrais pas trop abuse a nouveau (bientot la majorite de mon programme ne sera pas de moi...)mais j'ai encore un nouveau probleme, j'y est passe 8h dessus hier et j'arrive pas a trouve.

J'ai rajoute un if qui normalement me permet de
"d'incrementer" le nom d'un fichier pour que par exemple (dans mon cas ) si j'ai:

- Dans mon premier repertoire le fichier St._Thomas1.dbf
- Dans mon second repertoire les fichiers :

report.txt
St._Thomas1.dbf
St._Thomas2.dbf
St._Thomas3.dbf

je veux que ma variable name1char soit St._Thomas4.dbf a la fin de mon programme, le probleme c'est que cela marche parfaitement pour la premiere boucle (name1char="St._Thomas2.dbf) mais ensuite ecla ne marche plus (voir plus bas).

Mon programme :

#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
#include<stdio.h>
#include<string.h>
#include<direct.h>
#include<conio.h>

void tolist(LPCTSTR file);
void tocompare(LPCTSTR file);

char name1[255];
char name2[255];

void main()
{
tolist("C:\\Shapefile\\*.*");
tocompare("C:\\Report\\*.*");
}

void tolist(LPCTSTR file)
{
WIN32_FIND_DATA wData;
BOOL re;
HANDLE listing;
listing = FindFirstFile(file, &wData);

re=TRUE;

do
{
re = FindNextFile(listing, &wData);
strcpy(name1,wData.cFileName);
}
while (re);

}


void tocompare(LPCTSTR file)
{
WIN32_FIND_DATA wData2;
int length;
char lastchar,name1char[255];
BOOL re;
HANDLE listing2;

listing2 = FindFirstFile(file, &wData2);

re=TRUE;

do
{
re = FindNextFile(listing2, &wData2);
strcpy(name2,wData2.cFileName);
printf("\n\nname1char avant le if : %s",name1char);
printf("\nname2 avant le if : %s",name2);
strcpy(name1char,name1);

if (strcmp(name1char,name2) == 0)
{
length=strlen(name1char);
lastchar=name1char[length-5];
name1char[length-5]=lastchar+1;
printf("\nlastchar : %c",lastchar);
printf("\nname1char a la fin du if : %s",name1char);
}
printf("\nname1char apres le if : %s",name1char);
}
while (re);

}



et j'ai en resultat qd j'execute mon programme cela :


name1char avant le if : ╠╠╠╠╠╠╠╠&#
name2 avant le if : ..
name1char apres le if : St._Thomas1.dbf

name1char avant le if : St._Thomas1.dbf
name2 avant le if : report.txt
name1char apres le if : St._Thomas1.dbf

name1char avant le if : St._Thomas1.dbf
name2 avant le if : St._Thomas1.dbf
lastchar : 1
name1char a la fin du if : St._Thomas2.dbf
name1char apres le if : St._Thomas2.dbf

name1char avant le if : St._Thomas2.dbf
name2 avant le if : St._Thomas2.dbf
name1char apres le if : St._Thomas1.dbf

name1char avant le if : St._Thomas1.dbf
name2 avant le if : St._Thomas3.dbf
name1char apres le if : St._Thomas1.dbf

name1char avant le if : St._Thomas1.dbf
name2 avant le if : St._Thomas3.dbf
name1char apres le if : St._Thomas1.dbfPress any key to continue


Si vous pouviez m'aider....merci



-------------------------------
Réponse au message :
-------------------------------

> Erreur classique: tu fais pointer tes variables 'name1' et 'name2' sur une adresse mémoire locale aux fonctions 'tolist()' et 'tocompare'. Une variable locale est détruite en sortant de la fonction où elle est déclarée.
>
> Pour résoudre ton problème, tu peux par exemple utiliser la fonction strdup():
>
> name1=strdup(wData.cFileName);
>
> // Utilisation de name1
> // ...
>
> // Libération
> free(name1);
>
> Kaid - kaid.fr.st
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Voila, j'essaie de faire un bout de code qui me permet :
> >
> > -D'enumerer les fichiers de deux repertoire different (ca ca marche),
> > -Et ensuite mettre le nom de ces fichiers dans 2 variables : name1 et name2 (en considerant qu'il n'y a qu'1 fichier par repertoire) pour pouvoir ensuite les manipuler (ca ca marche pas).
> >
> > Mais j'ai un Pb, mes 2 variables name1 et name2 ont la meme valeur et j'ai meme des signes bizarre en sortie.
> >
> > Voila mon code:(si vous pouviez m'aider je vous en serez tres reconnaissant!!!!!)
> >
> >
> >
> >
> >

> > #include <iostream.h>
> > #include <windows.h>
> > #include <stdlib.h>
> > #include<stdio.h>
> > #include<string.h>
> > #include<direct.h>
> > #include<conio.h>
> >
> >
> > void tolist(LPCTSTR file);
> > void tocompare(LPCTSTR file);
> >
> >
> > char *name1=NULL;
> > char *name2=NULL;
> >
> >
> > void main()
> > {
> > tolist("C:\\Shapefile\\*.*"); //1er repertoire ds lequel je cherche
> > tocompare("C:\\Report\\*.*");//2eme repertoire dans lequel je cherche
> > printf("\n%s",name1);
> > printf("\n%s",name2);
> > }
> >
> > void tolist(LPCTSTR file) //fonction d'enumeration des fichiers d'un repertoire
> > {
> > WIN32_FIND_DATA wData;
> > BOOL re;
> > HANDLE listing;
> >
> > listing = FindFirstFile(file, &wData);
> >
> > re=TRUE;
> > do
> > {
> > re = FindNextFile(listing, &wData);
> > name1=wData.cFileName;
> > }
> > while (re);
> >
> > }
> >
> > //----------------------------------------------------------------
> >
> > void tocompare(LPCTSTR file) //meme fonction d'enumeration avec juste //wData2 et listing2 a la place de wData1 et listing1
> >
> > {
> > WIN32_FIND_DATA wData2;
> > BOOL re;
> > HANDLE listing2;
> >
> > listing2 = FindFirstFile(file, &wData2);
> >
> > re=TRUE;
> > do
> > {
> > re = FindNextFile(listing2, &wData2);
> > name2=wData2.cFileName;
> >
> > }
> > while (re);
> >
> > }

>
vendredi 9 mai 2003 à 23:24:38 | Re : Pb pour enumerer un repertoire

salley

Ca y est g resolu mon probleme
le

strcpy(name1char,name1);

devait etre sorti de la boucle.

Merci a kaid de m'avoir aider, ca m'a bien aider



-------------------------------
RsSponse au message :
-------------------------------

> Dabord trop merci pour ton aide, ca marche maintenant parfaitement, par contre j'ai prefere utiliser des strcpy mais l'erreur viens exeactement de ce que que tu m'as dis.
>
> Je voudrais pas trop abuse a nouveau (bientot la majorite de mon programme ne sera pas de moi...)mais j'ai encore un nouveau probleme, j'y est passe 8h dessus hier et j'arrive pas a trouve.
>
> J'ai rajoute un if qui normalement me permet de
> "d'incrementer" le nom d'un fichier pour que par exemple (dans mon cas ) si j'ai:
>
> - Dans mon premier repertoire le fichier St._Thomas1.dbf
> - Dans mon second repertoire les fichiers :
>
> report.txt
> St._Thomas1.dbf
> St._Thomas2.dbf
> St._Thomas3.dbf
>
> je veux que ma variable name1char soit St._Thomas4.dbf a la fin de mon programme, le probleme c'est que cela marche parfaitement pour la premiere boucle (name1char="St._Thomas2.dbf) mais ensuite ecla ne marche plus (voir plus bas).
>
> Mon programme :
>

> #include <iostream.h>
> #include <windows.h>
> #include <stdlib.h>
> #include<stdio.h>
> #include<string.h>
> #include<direct.h>
> #include<conio.h>
>
> void tolist(LPCTSTR file);
> void tocompare(LPCTSTR file);
>
> char name1[255];
> char name2[255];
>
> void main()
> {
> tolist("C:\\Shapefile\\*.*");
> tocompare("C:\\Report\\*.*");
> }
>
> void tolist(LPCTSTR file)
> {
> WIN32_FIND_DATA wData;
> BOOL re;
> HANDLE listing;
> listing = FindFirstFile(file, &wData);
>
> re=TRUE;
>
> do
> {
> re = FindNextFile(listing, &wData);
> strcpy(name1,wData.cFileName);
> }
> while (re);
>
> }
>
>
> void tocompare(LPCTSTR file)
> {
> WIN32_FIND_DATA wData2;
> int length;
> char lastchar,name1char[255];
> BOOL re;
> HANDLE listing2;
>
> listing2 = FindFirstFile(file, &wData2);
>
> re=TRUE;
>
> do
> {
> re = FindNextFile(listing2, &wData2);
> strcpy(name2,wData2.cFileName);
> printf("\n\nname1char avant le if : %s",name1char);
> printf("\nname2 avant le if : %s",name2);
> strcpy(name1char,name1);
>
> if (strcmp(name1char,name2) == 0)
> {
> length=strlen(name1char);
> lastchar=name1char[length-5];
> name1char[length-5]=lastchar+1;
> printf("\nlastchar : %c",lastchar);
> printf("\nname1char a la fin du if : %s",name1char);
> }
> printf("\nname1char apres le if : %s",name1char);
> }
> while (re);
>
> }
>

>
>
> et j'ai en resultat qd j'execute mon programme cela :
>

>
> name1char avant le if : sdsdsdsdsdsdsdsd&#
> name2 avant le if : ..
> name1char apres le if : St._Thomas1.dbf
>
> name1char avant le if : St._Thomas1.dbf
> name2 avant le if : report.txt
> name1char apres le if : St._Thomas1.dbf
>
> name1char avant le if : St._Thomas1.dbf
> name2 avant le if : St._Thomas1.dbf
> lastchar : 1
> name1char a la fin du if : St._Thomas2.dbf
> name1char apres le if : St._Thomas2.dbf
>
> name1char avant le if : St._Thomas2.dbf
> name2 avant le if : St._Thomas2.dbf
> name1char apres le if : St._Thomas1.dbf
>
> name1char avant le if : St._Thomas1.dbf
> name2 avant le if : St._Thomas3.dbf
> name1char apres le if : St._Thomas1.dbf
>
> name1char avant le if : St._Thomas1.dbf
> name2 avant le if : St._Thomas3.dbf
> name1char apres le if : St._Thomas1.dbfPress any key to continue

>
> Si vous pouviez m'aider....merci
>
>
>
> -------------------------------
> RsSponse au message :
> -------------------------------
>
> > Erreur classique: tu fais pointer tes variables 'name1' et 'name2' sur une adresse msSmoire locale aux fonctions 'tolist()' et 'tocompare'. Une variable locale est dsStruite en sortant de la fonction osZ elle est dsSclarsSe.
> >
> > Pour rsSsoudre ton problssme, tu peux par exemple utiliser la fonction strdup():
> >
> > name1=strdup(wData.cFileName);
> >
> > // Utilisation de name1
> > // ...
> >
> > // LibsSration
> > free(name1);
> >
> > Kaid - kaid.fr.st
> >
> > -------------------------------
> > RsSponse au message :
> > -------------------------------
> >
> > > Voila, j'essaie de faire un bout de code qui me permet :
> > >
> > > -D'enumerer les fichiers de deux repertoire different (ca ca marche),
> > > -Et ensuite mettre le nom de ces fichiers dans 2 variables : name1 et name2 (en considerant qu'il n'y a qu'1 fichier par repertoire) pour pouvoir ensuite les manipuler (ca ca marche pas).
> > >
> > > Mais j'ai un Pb, mes 2 variables name1 et name2 ont la meme valeur et j'ai meme des signes bizarre en sortie.
> > >
> > > Voila mon code:(si vous pouviez m'aider je vous en serez tres reconnaissant!!!!!)
> > >
> > >
> > >
> > >
> > >

> > > #include <iostream.h>
> > > #include <windows.h>
> > > #include <stdlib.h>
> > > #include<stdio.h>
> > > #include<string.h>
> > > #include<direct.h>
> > > #include<conio.h>
> > >
> > >
> > > void tolist(LPCTSTR file);
> > > void tocompare(LPCTSTR file);
> > >
> > >
> > > char *name1=NULL;
> > > char *name2=NULL;
> > >
> > >
> > > void main()
> > > {
> > > tolist("C:\\Shapefile\\*.*"); //1er repertoire ds lequel je cherche
> > > tocompare("C:\\Report\\*.*");//2eme repertoire dans lequel je cherche
> > > printf("\n%s",name1);
> > > printf("\n%s",name2);
> > > }
> > >
> > > void tolist(LPCTSTR file) //fonction d'enumeration des fichiers d'un repertoire
> > > {
> > > WIN32_FIND_DATA wData;
> > > BOOL re;
> > > HANDLE listing;
> > >
> > > listing = FindFirstFile(file, &wData);
> > >
> > > re=TRUE;
> > > do
> > > {
> > > re = FindNextFile(listing, &wData);
> > > name1=wData.cFileName;
> > > }
> > > while (re);
> > >
> > > }
> > >
> > > //----------------------------------------------------------------
> > >
> > > void tocompare(LPCTSTR file) //meme fonction d'enumeration avec juste //wData2 et listing2 a la place de wData1 et listing1
> > >
> > > {
> > > WIN32_FIND_DATA wData2;
> > > BOOL re;
> > > HANDLE listing2;
> > >
> > > listing2 = FindFirstFile(file, &wData2);
> > >
> > > re=TRUE;
> > > do
> > > {
> > > re = FindNextFile(listing2, &wData2);
> > > name2=wData2.cFileName;
> > >
> > > }
> > > while (re);
> > >
> > > }

> >
>


Cette discussion est classée dans : file, include, repertoire, re, name1


Répondre à ce message

Sujets en rapport avec ce message

Petit probleme de code en C sur Linux !! [ par UncleShu ] Je voudrais créer un fichier dans le réperoire personnel d'un utilisateur mais mon code ne marche pas !!#include #include #include #define DIR $HOM Problème de lecture [ par Hades53 ] Voila, j'ai fait un code pour lire des fichiers qui marche, mais il y a un petit problème avec la dernière ligne du fichier qu'on veut lire:si la dern VC++ et erreurs de compilations :( [ par morpheus83z ] Bonjour tout le monde !Voilà, je ne comprends pas, j'ai un programme qui ne veut pas se compiler et je désespère vraiment ...#include // iostream.h e Fichier include "glut.h" [ par Ben0007 ] Hello,J'obtiens ce message d'erreur en compilant un exemple de programme trouvé sur ce site:"fatal error C1083: Cannot open include file: 'gl/glut.h': Parcours récursif d'un repertoire [ par zegota ] mon parcours ne fonctionne que pour le repertoire passé en parametreet pour ses sous repertoire.. mais il ne vas pas au delas dans l'arborescence.. je affichage du chemin d'un fichier lors d'un listage recursif en C [ par zegota ] voici ma procédure de parcours récursif, je l'ai testé elle fonctionne (sauf pour les rep qui commencent par un "." mais ce n'est pas un problme pour Erreurs de compilations bizarres avec Visual C++ 6 [ par VTS_35 ] Bonjour,G encore des problèmes de compilation avec mon programme. Je me suis rendu compte que le programme allait devenir balaise, alors j'ai décidé d prob avec include<bzlib.h> [ par progrima ] j'ai télécharger un code de codes sources qui fait de la compréssion , mais en l'exécutant j'ai eut l'erreur suivante :Cannot open include file: 'bzli Lecture d'un fichier et affichage de balises [ par SpiritAnghell ] Bonjour;Le programme suivant est censé extraire les balises d'un fichier xml et les afficher une par une:#include #include #include #include #include Comment changer la lecture seul d'un repertoire ? [ par panik6666666 ] Bonjour a tous, J'ai une question bete: comment changer la lecture seul d'un repertoire ? j'ai essayé avec avec ca : HANDLE hFile = CreateFile(nom_r


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales