[C++] Lister le contenu d'un dossier ?
Dernière réponse : dans Programmation
J'ai recuperé ce code sur internet :
Mais a sa compilation dans VS 2008 il me reponds :
error C2664: 'FindFirstFileW' : impossible de convertir le paramètre 1 de 'char [260]' en 'LPCWSTR'.
Pourtant toutes les sources que je vois sur internet sont ecrites avec des char et ca a l'air de marcher pour eux ?!
int main()
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
cout<<"Path: ";
cin.get(DirSpec, MAX_PATH);
cout<<"\n";
strncat(DirSpec, "\\*.*", 3);
hFind = FindFirstFile(DirSpec, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE)
{
cout<<"Error: invalid path\n";
}
cout<<FindFileData.cFileName<<"\n";
while(FindNextFile(hFind, &FindFileData) != 0)
{
cout<<FindFileData.cFileName<<"\n";
}
FindClose(hFind);
return 0;
}
Mais a sa compilation dans VS 2008 il me reponds :
error C2664: 'FindFirstFileW' : impossible de convertir le paramètre 1 de 'char [260]' en 'LPCWSTR'.
Pourtant toutes les sources que je vois sur internet sont ecrites avec des char et ca a l'air de marcher pour eux ?!
Autres pages sur : lister contenu dossier
Lassé par la pub ? Créez un compte
LPCWSTR:
STR => chaine de caractères
LP => pointeur
LPC => pointeur constant (mais tout pointeur peut être implicitement convertit en pointeur constant, donc OK)
W => wide, c'est donc une chaine de caracètres dont les caractères sont codés sur 2 octets
Il te faut faire une conversion.
http://msdn.microsoft.com/en-us/library/ms776413.aspx
STR => chaine de caractères
LP => pointeur
LPC => pointeur constant (mais tout pointeur peut être implicitement convertit en pointeur constant, donc OK)
W => wide, c'est donc une chaine de caracètres dont les caractères sont codés sur 2 octets
Il te faut faire une conversion.
http://msdn.microsoft.com/en-us/library/ms776413.aspx
Merci pour ton aide
J'ai encore un probleme, j'ai remodlé le code comme ceci :
Mais le compilo dit :
0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00417758 => qui correspond a Temp.
Hug ???
J'ai encore un probleme, j'ai remodlé le code comme ceci :
int main()
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
LPWSTR Temp=0;
cout<<"Path: ";
cin.get(DirSpec, MAX_PATH);
cout<<"\n";
strncat(DirSpec, "\\*.*", 3);
Temp=L"";
MultiByteToWideChar(CP_ACP,0,DirSpec,sizeof(DirSpec),Temp,2);
hFind = FindFirstFile(Temp, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE)
{
cout<<"Error: invalid path\n";
}
cout<<FindFileData.cFileName<<"\n";
while(FindNextFile(hFind, &FindFileData) != 0)
{
cout<<FindFileData.cFileName<<"\n";
}
FindClose(hFind);
return 0;
}
Mais le compilo dit :
0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00417758 => qui correspond a Temp.
Hug ???
pointeur null sur Temp
LPWSTR Temp=0;
Temp pointe sur une donnée temporaire "" de taille 2, à la ligne suivante, la donnée sera "désallouée".
Temp=L"";
Il faut que Temp soit alloué:
- soit par un tableau dimensionné WCHAR Temp[MAX_PATH*2]="";
- soit par allocation dynamique LPWSTR Temp=new WCHAR[MAX_PATH*2]
Ensuite tu donnes bien la taille dans la fonction (qui doit s'arrêter à la limite pour éviter tout buffer overflow).
int main()
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
LPWSTR Temp=new WCHAR[MAX_PATH*2];
cout<<"Path: ";
cin.get(DirSpec, MAX_PATH);
cout<<"\n";
strncat(DirSpec, "\\*.*", 3);
MultiByteToWideChar(CP_ACP,0,DirSpec,sizeof(DirSpec),Temp,2);
cout<<&Temp;
hFind = FindFirstFile(Temp, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE)
{
cout<<"Error: invalid path\n";
}
cout<<FindFileData.cFileName<<"\n";
while(FindNextFile(hFind, &FindFileData) != 0)
{
cout<<FindFileData.cFileName<<"\n";
}
FindClose(hFind);
system("pause");
return 0;
ok ca compile, mais ca a pas l'aire de marcher ( erf ... dur dur le cpp, vive VB et la feantise ! )
Je rentre : c:\Windows. Et cela ne marche pas commeme ....
erf ....
0012FBEC0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
Appuyez sur une touche pour continuer...
Je comprends pas pourquoi FindFileData.cFileName retourne son
adresse ....
Citation :
Path: c:\windows0012FBEC0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
0012FD3C
Appuyez sur une touche pour continuer...
Je comprends pas pourquoi FindFileData.cFileName retourne son
adresse ....
re erf ....
00335FD80012FD30
MSOCache and Settings ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠MyVideos and Settings ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ntldr os and Settings ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Program Files Settin
gs ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
RECYCLER iles Settings ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠System Volume Information ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠WINDOWS olume Information ╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Appuyez sur une touc
he pour continuer...
Citation :
Path: c:\00335FD80012FD30
MSOCache and Settings ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠MyVideos and Settings ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ntldr os and Settings ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Program Files Settin
gs ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
RECYCLER iles Settings ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠System Volume Information ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠WINDOWS olume Information ╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Appuyez sur une touc
he pour continuer...
int main()
{
int i=0;
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
LPWSTR Temp=new WCHAR[MAX_PATH*2];
cout<<"Path: ";
cin.get(DirSpec, MAX_PATH);
cout<<"\n";
strncat(DirSpec, "\\*.*", 3);
MultiByteToWideChar(CP_ACP,0,DirSpec,sizeof(DirSpec),Temp,MAX_PATH*2);
cout<<Temp;
hFind = FindFirstFile(Temp, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE)
{
cout<<"Error: invalid path\n";
}
cout<<FindFileData.cFileName<<"\n";
while(FindNextFile(hFind, &FindFileData) != 0)
{
for (i = 0; i < 260; i++) {
cout<<(char)FindFileData.cFileName[i];
}
}
FindClose(hFind);
system("pause");
return 0;
}
Desolé du double post, mais ca fait lourd dans un seul message :S
Documents and Settings
D
MSOCache
MyVideos
ntldr
Program Files
P
RECYCLER
System Volume Information
S
WINDOWS
Appuyez sur une touche pour continuer...
Reste plus qu'a comprendre d'ou sortent les dossiers : D , P et S
Merci beaucoup pour ton aide !
int main()
{
int i=0;
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
LPWSTR Temp=new WCHAR[MAX_PATH*2];
char antibuffer[2] = "0";
for(int i=0;i<261;i++)
FindFileData.cFileName[i]=antibuffer[1];
cout<<"Path: ";
cin.get(DirSpec, MAX_PATH);
cout<<"\n";
strncat(DirSpec, "\\*.*", 3);
MultiByteToWideChar(CP_ACP,0,DirSpec,sizeof(DirSpec),Temp,MAX_PATH*2);
hFind = FindFirstFile(Temp, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE)
{
cout<<"Error: invalid path\n";
}
for (i = 0; i < 261; i++) {
cout<<(char)FindFileData.cFileName[i];
}
cout<<"\n";
for(int i=0;i<261;i++)
FindFileData.cFileName[i]=antibuffer[1];
while(FindNextFile(hFind, &FindFileData) != 0)
{
for (i = 0; i < 261; i++) {
cout<<(char)FindFileData.cFileName[i];
}
cout<<"\n";
for(int i=0;i<261;i++)
FindFileData.cFileName[i]=antibuffer[1];
}
FindClose(hFind);
system("pause");
return 0;
}
Citation :
Path: c:\Documents and Settings
D
MSOCache
MyVideos
ntldr
Program Files
P
RECYCLER
System Volume Information
S
WINDOWS
Appuyez sur une touche pour continuer...
Reste plus qu'a comprendre d'ou sortent les dossiers : D , P et S
Merci beaucoup pour ton aide !
for (i = 0; i < 261; i++) {
cout<<(char)FindFileData.cFileName[i];
}
C'est quoi ce truc ?
Je ne sais pas si tu maitrise ce que tu as fait, qui normalement devrait générer un warning (de perte d'information).
tu convertis un nombre sur 2 octets en un nombre sur 1 octet. Comme les caractères ASCII ont une valeur inférieure à 255, ça marchera, mais si le caractère est réellement codé sur 2 octets, ça prend le modulo (reste de la division) de 256.
bref, toi tu affiche 261 caractères. Or ton répertoire ne fait pas autant de caractères, tu va donc lire au delà de ta chaine de caractère (tu dépasses le '\0' de fin de chaine), c'est pour ça que tu as n'importe quoi après.
Si tu étais allé sur le lien MSDN que je t'avais donné, et que tu étais allé voir dans le "see also", tu aurais vu la fonction WideCharToMultiByte qui fait le travail inverse de MultiByteToWideChar. C'est donc cette fonction que tu dois utiliser.
http://msdn.microsoft.com/en-us/library/ms776420(VS.85).aspx
Je déterre le topic car j'ai repris ce code ttaleur et j'ai remarqué qu'il ne listait pas les autres fichiers, mais que des dossiers ! Or il me faut qu'il liste aussi des fichiers da tout genre : exe,asp,htm etc ...
J'ai beau chercher, google me montre toujours ce bout de code pour faire ce que je veux ...
help ?
J'ai beau chercher, google me montre toujours ce bout de code pour faire ce que je veux ...
help ?
Normalement ça doit tout lister. Essaie en utilisant * au lieu de *.*
sur MSDN, il y a un exemple, donc je pense que ça devrait marcher.
http://msdn.microsoft.com/en-us/library/aa365200(VS.85).aspx
sur MSDN, il y a un exemple, donc je pense que ça devrait marcher.
http://msdn.microsoft.com/en-us/library/aa365200(VS.85).aspx
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumLister le contenu d'un dossier vista
- ForumLister le contenu d'un dossier windows
- ForumFtp effacer le contenu d'un dossier
- ForumAfficher le contenu d'un dossier web
- ForumFtp afficher le contenu d'un dossier
- ForumVba recuperer contenu d'un dossier
- ForumImprimer le contenu d'un dossier
- ForumPhp afficher le contenu d'un dossier
- ForumAfficher contenu d'un dossier php
- ForumPhp effacer le contenu d'un dossier
- Voir plus