• 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

Object Storage Arubacloud
0 głosów
276 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 (194,920 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 (194,920 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ź 319 wizyt
0 głosów
0 odpowiedzi 384 wizyt
pytanie zadane 20 października 2018 w C i C++ przez poldeeek Mądrala (5,980 p.)
0 głosów
1 odpowiedź 567 wizyt
pytanie zadane 25 października 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,632 zapytań

141,502 odpowiedzi

319,883 komentarzy

62,015 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...