Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

lista plikow z katalogu - ostatni plik nadpisuje całą tablicę

Ostatnio zmodyfikowano 2015-09-01 12:59
Autor Wiadomość
robaczek122
Temat założony przez niniejszego użytkownika
lista plikow z katalogu - ostatni plik nadpisuje całą tablicę
» 2015-09-01 12:38:33
C/C++
#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 ) {
        /* print all the files and directories within directory */
        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 {
        /* could not open directory */
        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.
P-137115
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ć.
P-137116
robaczek122
Temat założony przez niniejszego użytkownika
» 2015-09-01 12:59:42
Ok udało się:
C/C++
#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 ) {
        /* print all the files and directories within directory */
        while(( ent = readdir( dir ) ) != NULL ) {
            files[ i ] = ent->d_name;
            i++;
        }
        closedir( dir );
    }
    else {
        /* could not open directory */
        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...
P-137117
« 1 »
  Strona 1 z 1