J'ai écris une fonction qui scanne les dossiers, sous dossiers et fichiers d'un répertoire,
Le probleme, c'est qu'elle ne fonctionne pas sous certaines partitions, notament la partition contenant Windows XP?
voici le code:
int Scan()
{
i++;
SetCurrentDirectory(chemin_temp[i]);
hFichier[i]=FindFirstFile("*.*", &DataFichier[i]);
if (hFichier[i]!=INVALID_HANDLE_VALUE)
{
if (!(DataFichier[i].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if(IsMP3(DataFichier[i].cFileName))
{
SetDlgItemText(hDlg,IDC_EDIT_CIBLE, DataFichier[i].cFileName);//MessageBox (NULL, DataFichier[i].cFileName, "Fichier", MB_ICONINFORMATION);
Sleep(10);
UpdateWindow(hDlg);
}
}
else
{
if(DataFichier[i].cFileName[0] != '.')
{
//MessageBox (NULL, DataFichier[i].cFileName, "Dossier", MB_ICONINFORMATION);
lstrcpy(chemin_temp[i+1],"");
lstrcat(chemin_temp[i+1],chemin_temp[i]);
lstrcat(chemin_temp[i+1],"\\");
lstrcat(chemin_temp[i+1],DataFichier[i].cFileName);
Scan();
}
}
while (FindNextFile(hFichier[i], &DataFichier[i]) != 0)
{
if (!(DataFichier[i].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if(IsMP3(DataFichier[i].cFileName))
{
SetDlgItemText(hDlg,IDC_EDIT_CIBLE, DataFichier[i].cFileName);//MessageBox (NULL, DataFichier[i].cFileName, "Fichier", MB_ICONINFORMATION);
Sleep(10);
UpdateWindow(hDlg);
}
}
else
{
if(DataFichier[i].cFileName[0] != '.')
{
//MessageBox (NULL, DataFichier[i].cFileName, "Dossier", MB_ICONINFORMATION);
lstrcpy(chemin_temp[i+1],"");
lstrcat(chemin_temp[i+1],chemin_temp[i]);
lstrcat(chemin_temp[i+1],"\\");
lstrcat(chemin_temp[i+1],DataFichier[i].cFileName);
Scan();
}
}
}
FindClose(hFichier[i]);
i--;
SetCurrentDirectory(chemin_temp[i]);
if(i<0)
return 0;
}
return 0;
}
BOOL IsMP3(char* nom_fichier)
{
int len = lstrlen(nom_fichier);
if( !(len<7) )
{
if( ((nom_fichier[len-3] == 'M') | (nom_fichier[len-3] == 'm')) & ((nom_fichier[len-2] == 'P') | (nom_fichier[len-2] == 'p')) & (nom_fichier[len-1] == '3') )
{
nb_mp3++;
SetDlgItemInt(hDlg,IDC_EDIT_SOURCE,nb_mp3,TRUE);
return TRUE;
}
else
return FALSE;
}
else
return FALSE;
}
void init()
{
for(i=0;i<20;i++)
{
ZeroMemory(&hFichier[i], sizeof(HANDLE));
ZeroMemory(&DataFichier[i], sizeof(WIN32_FIND_DATA));
ZeroMemory(chemin_temp[i], 256);
ZeroMemory(&DataFichier[i].cFileName, 256);
}
i=0;
nb_mp3=0;
}
DWORD WINAPI ThreadProc(LPVOID lpParameter) // fonction executée par le thread
{
init();
lstrcpy(chemin_temp[i+1],"");
lstrcat(chemin_temp[i+1],"c:");
//i=0;
//j=0;
Scan();
return 0;
}
Peut etre qu'il me manque une condition à tester pour passer certains fichiers (systeeme, inaccessible, ...)
Une idée ??
melkior le necrarque.