Problem z przeglądaniem zawartości katalogów

Odpowiedz Nowy wątek
2006-11-19 14:25

Rejestracja: 13 lat temu

Ostatnio: 11 lat temu

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();

Pozostało 580 znaków

2006-11-19 18:58

Rejestracja: 13 lat temu

Ostatnio: 12 lat temu

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 :)

Pozostało 580 znaków

2006-11-19 20:14

Rejestracja: 13 lat temu

Ostatnio: 11 lat temu

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.

Pozostało 580 znaków

2006-11-19 23:11

Rejestracja: 16 lat temu

Ostatnio: 6 lat temu

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();

Pozostało 580 znaków

2006-11-20 00:41

Rejestracja: 13 lat temu

Ostatnio: 11 lat temu

0

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

Pozostało 580 znaków

Odpowiedz

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