lista plikow z katalogu - ostatni plik nadpisuje całą tablicę
Ostatnio zmodyfikowano 2015-09-01 12:59
robaczek122 Temat założony przez niniejszego użytkownika |
lista plikow z katalogu - ostatni plik nadpisuje całą tablicę » 2015-09-01 12:38:33 #include <stdio.h> #include <dirent.h> #include <string>
using namespace std;
char * files[ 10000 ]; int i = 0, j = 0;
int main() { DIR * dir; struct dirent * ent; if(( dir = opendir( "c:\\" ) ) != NULL ) { while(( ent = readdir( dir ) ) != NULL ) { files[ i ] =( ent->d_name ); i++; for( j = 0; j <= i - 1; j++ ) { printf( "%s%i\n", files[ j ], j ); } } closedir( dir ); } else { perror( "" ); return 0; } }
Linijka: files[ i ] =( ent->d_name ); napisuje tablicę nazwą pliku, tak więc na końcu powstaje tablica o wielkości tyle ile było plików, ale nie ma w niej kolejnych nazw plików, lecz wszędzie jest nazwa ostatniego pliku. Nie wiem dlaczego się tak dzieje, skoro w pętli while teoretycznie inkrementuje licznik. |
|
Monika90 |
» 2015-09-01 12:57:54 Zamiast char * files[ 10000 ]; użyj std::string files[ 10000 ]; . Oczywiście drukowanie nazw za pomocą printf trzeba będzie poprawić. |
|
robaczek122 Temat założony przez niniejszego użytkownika |
» 2015-09-01 12:59:42 Ok udało się: #include <stdio.h> #include <dirent.h> #include <string>
using namespace std;
string files[ 10000 ]; int i = 0, j = 0;
int main() { DIR * dir; struct dirent * ent; if(( dir = opendir( "c:\\" ) ) != NULL ) { while(( ent = readdir( dir ) ) != NULL ) { files[ i ] = ent->d_name; i++; } closedir( dir ); } else { perror( "" ); return 0; } for( j = 0; j <= i - 1; j++ ) { printf( "%s%i\n", files[ j ].c_str(), j ); } }
Aczkolwiek nie rozumiem co tam się działo wcześniej... |
|
« 1 » |