Problem z przeglądaniem zawartości katalogów

0

plik_sciezek zawiera ok 4000 tys ściezek do katalogów, po jednej w linii;
Czy ktoś jest w stanie mi wyjaśnić dlaczego ten algorytm zatrzymuje przeglądanie plików na sciezce w 75 linii (to akurat nie jest wazne, ważne że się zatrzymuje), a pozostałe ścieżki dalej pobiera z pliku, ale nie chce ich otwierać ;/

        int linia = 0;
        char sciezka[200];
        char plik[50];
        struct dirent *d;
        DIR *dd;
        fstream plik_sciezek;
        plik_sciezek.open("sciezki.txt",ios::in|ios::binary);
        while(plik_sciezek.getline(sciezka,sizeof(sciezka),'\n')){
        linia++;
                if ((dd = opendir(sciezka)) != NULL){
                        while ((d=readdir(dd)) != NULL){
                                if (d->d_type == 8){
                                        strcpy(plik, d->d_name);
                                        cout<<"--------" << plik<< " "<<linia<<endl;
                                }
                        }
                }
                else {
                       cout << sciezka << " <----- Nie otworzylem!!"<<endl;
                }
        }
plik_sciezek.close();
0

Może ścieżka do pliku jest dłuższa niż to pomieści zmienna ścieżka? Proponuje użyć "string" zamias char i czyścić co pobranie :)

0

właśnie nie. Jest nawet krótsza od tej ostatniej, którą poprawnie wczytuje. Zwiększanie wielkości zmiennej sciezka nic nie daje, podobnie string... Ze stringiem to byłaby zresztą większa zabawa, bo opendir potrzebuje za argument zmienna const char, wiec na jedno by wychodzilo.

0

A tak ? :

        int linia = 0;
        string sciezka;
        struct dirent *d;
        DIR *dd;
        ifstream plik_sciezek("sciezki.txt");
        while(!plik_sciezek.eof()
        {
           getline(plik_sciezek, sciezka);
           linia++;
                if ((dd = opendir(sciezka.c_str())) != NULL){
                        while ((d=readdir(dd)) != NULL){
                                if (d->d_type == 8){
                                        cout<<"--------" << d->d_name<< " "<<linia<<endl;
                                }
                        }
                }
                else {
                       cout << sciezka << " <----- Nie otworzylem!!"<<endl;
                }
        }
plik_sciezek.close();
0

niestety oprócz tego, że bardziej mi się kod podoba :), dalej wysypuje się na tej samej linii... ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1