• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z listowaniem katalogu w C

0 głosów
553 wizyt
pytanie zadane 10 maja 2018 w C i C++ przez Tomek112 Początkujący (310 p.)

Witam,

tak jak w temacie mam problem z napisaniem kodu, który po podaniu ścieżki będzie wypisywał wszystkie pliki danego typu znajdujące się w folderze, który został podany ścieżką. Udało mi się napisać coś takiego ale niestety zawsze wypisywany jest napis "Podany katalog nie zawiera żadnych plików ...". Oczywiście plik txt zanjduje się w zadanym folderze. Niżej załączam utworzony przeze mnie kod:

#include <stdio.h>
#include <stdlib.h>
#include <io.h>

void search_folder(char path){
    struct _finddata_t file_info;
    long handle=_findfirst(path+"*.txt",&file_info);
    if(handle=-1){
        printf("Podany katalog nie zawiera zadnych plikow z rozszerzeniem txt \n");
        _findclose(handle);
    }else{
        printf("%s\n",file_info.name);
        int find_next=0;
        while(find_next!=-1){
            find_next=_findnext(handle,&file_info);
            printf("%s\n",file_info.name);
        }
        _findclose(handle);
    }
};

int main()
{
    char file_path[_MAX_PATH];
    printf("/* Witaj w programie sortujacym */\n");
    printf("Podaj pelna sciezke do folderu z plikami, ktore chcesz sortowac i kliknij ENTER: \n");
    fgets(file_path,sizeof file_path,stdin);

    search_folder(file_path);

    return 0;
}

Za każdą wskazówkę z góry dziękuję.

Pozdrawiam

3 odpowiedzi

+2 głosów
odpowiedź 10 maja 2018 przez j23 Mędrzec (195,220 p.)
wybrane 10 maja 2018 przez Tomek112
 
Najlepsza
  • Linia 5: parametr funkcji powinien być typu const char* a nie char.
  • Linia 7: path + "*.txt" <--- to w C nie ma prawa działać. To nie C++ z typem std::string. Użyj funkcji strcat.
  • Linia 8: zły warunek.

 

Jakim cudem Ci się to skompilowało?

+1 głos
odpowiedź 10 maja 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
if(handle=-1)

Operator porównania to ==.

0 głosów
odpowiedź 10 maja 2018 przez Tomek112 Początkujący (310 p.)

Poprawiłem wymienione przez was błędy natomiast mam problem z użyciem funkcji strcat. Funkcjonalność łączenia podanej ścieżki z dopiskiem "*.txt" przeniosłem do funkcji main.

Generalizująć to schemat programu przedstawia się następująco (schemat tej części to punkty 1-3):

1) użytkownik podaje sciezke,w ktorej ma pliki z rozszerzeniem txt

2) program listuje mu nazwy plików  z tym rozszerzeniem w podanej ścieżce

3) następnie program prosi o wpisanie nazwy pliku, na którym będziemy operowac

          4) po podaniu nazwy pliku program otwiera plik ładuje jego zawartość do tablicy i go zamyka

          5) ostatnia rzecz to sortowanie tej tablicy i zwrócenie wynikowej

Nasuwa się więc pytanie w jakiej formie podać funkcji search folder już gotową ścieżkę, w której będzie przeszukiwał wiedząc, że końcowo wykorzystamy tę ścieżkę do otwarcia pliku?

Niżej załączam aktualny kod:

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <string.h>


void search_folder(const char* path){

    struct _finddata_t file_info;
    long handle=_findfirst(path,&file_info);
    if(handle==-1){
        printf("Podany katalog nie zawiera zadnych plikow z rozszerzeniem txt \n");
        _findclose(handle);
    }else{
        printf("%s\n",file_info.name);
        int find_next=0;
        while(find_next!=-1){
            find_next=_findnext(handle,&file_info);
            printf("%s\n",file_info.name);
        }
        _findclose(handle);
    }
};

int main()
{
    const char file_path[_MAX_PATH],file_path_complete[_MAX_PATH+5];
    printf("/* Witaj w programie sortujacym */\n");
    printf("Podaj pelna sciezke do folderu z plikami, ktore chcesz sortowac i kliknij ENTER: \n");

    fgets(file_path,sizeof file_path,stdin);
    int i=0;
    while(file_path[i]!=EOF){
            i++;
    }

    printf("%s\n",file_path);
    printf("%d\n",i);
    strcat(file_path[i],"*.txt");
    printf("%s\n",file_path);

    return 0;
}

 

komentarz 10 maja 2018 przez j23 Mędrzec (195,220 p.)
  • Linia 27: po co ten const?
  • Linia 39:  tak powinno być:
        size_t n = strlen(file_path);
        if(n) file_path[n - 1] = 0;
        strcat(file_path, "*.txt");

     

Podobne pytania

0 głosów
1 odpowiedź 604 wizyt
0 głosów
0 odpowiedzi 651 wizyt
pytanie zadane 20 października 2018 w C i C++ przez poldeeek Mądrala (5,980 p.)
0 głosów
1 odpowiedź 1,079 wizyt
pytanie zadane 25 października 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...