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

Tworzenie pliku "txt" i zapisywanie do niego posortowanej listy nazw plików z podanego folderu.

VPS Starter Arubacloud
0 głosów
1,214 wizyt
pytanie zadane 28 marca 2018 w C i C++ przez piotrrussw Nowicjusz (240 p.)

Witam muszę napisać program w języku C, w którym sobie kompletnie nie radzę i nigdy się go nie uczyłem program.

Ma on za zadanie utworzyć plik testowy o nazwie podanej w argumencie wiersza poleceń - z tym sobie poradziłem już. Chyba, że nazwa będzie nie podana, to ma wyjść z programu z odpowiednim komunikatem, to również mam. Następnie do tego pliku mam wpisać posortowaną listę plików z podanego folderu (wynik funkcji readdir) i tu już mam problem i nie wiem jak to zrobić. Na koniec mam zamknąć plik, otworzyć do odczytu i wydrukować na ekranie.

Z góry dziękuję 

Pozdrawiam

Tyle mam kodu: 

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




int fileExists(char* fileName){
    FILE* tfile;
    tfile = fopen(fileName, "r");
    if(tfile){
        fclose(tfile);
        return(1);
    }
    else return(0);
}
void listFiles( const char * dir_name) {
    struct dirent * file;
    DIR * directory;

    if(( directory = opendir( dir_name ) ) ) {
        while(( file = readdir( directory ) ) )
             puts( file->d_name );

        closedir( directory );
    }
    else
         printf("ERROR: DIRECTORY MAY NOT EXIST");

}

int main(int argc, char *argv[]){

    if(argc < 2){
        printf("ERROR: Not enough arguments!");
        return (-1);
    }

    char* ProgFile = argv[1];

    if(fileExists(ProgFile)){
        printf("File exists!");
        return(-1);
    }

    FILE *tfile = fopen(ProgFile, "w");
    if(tfile) {
        printf("ERROR: CANNOT OPEN!");
        return(0);
    }





    return(0);
}

 

komentarz 28 marca 2018 przez 0e85dc6eaf Dyskutant (8,840 p.)

W 47 linijce chyba powinno być

if(tfile==NULL){

Bo obecnie wyrzucasz błąd kiedy plik uda się poprawnie utworzyć

komentarz 28 marca 2018 przez piotrrussw Nowicjusz (240 p.)
Faktycznie, już poprawione
komentarz 28 marca 2018 przez 0e85dc6eaf Dyskutant (8,840 p.)
A skąd ma być pobrana ta lista plików? W sensie czy nazwa folderu też ma być parametrem do programu czy będzie ona wpisana na stałe w programie?
komentarz 28 marca 2018 przez 0e85dc6eaf Dyskutant (8,840 p.)
Bo jeśli chodzi o pierwszą część zadania to możesz po prostu to funkcji listFiles() dodać drugi parametr (FILE*) i wywołać tą funkcję w mainie przekazując jej uchwyt tfile.

Natomiast w funkcji listFiles() zamienić puts() na fputs() (fputs przyjmuje dodatkowy parametr, który jest właśnie typu FILE*)
komentarz 28 marca 2018 przez piotrrussw Nowicjusz (240 p.)
właśnie tak ma być, a jak to posortować?
komentarz 28 marca 2018 przez 0e85dc6eaf Dyskutant (8,840 p.)
Z tego co znalazłem w Internecie to ta funkcja nie gwarantuje, że wyniki będą posortowane, więc chyba niestety musisz zaimplementować własne sortowanie tych nazw.

A nie możesz użyć funkcji scandir()? Wtedy od razu będziesz miał posortowane wyniki.
komentarz 28 marca 2018 przez 0e85dc6eaf Dyskutant (8,840 p.)
A jeżeli koniecznie musisz użyć readdir() i to własnoręcznie posortować to niestety ci nie pomogę, bo jeżeli o sortowanie chodzi to dla mnie tylko C++ ;)
komentarz 28 marca 2018 przez piotrrussw Nowicjusz (240 p.)
Szczerze mówiąc, dowiedziałem się, że funkcje z języka C typu "fopen" też odpadją, więc poczytam dużo o funkcjach systemowych z Linuxa i spróbuje jakoś to zrobić od nowa.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 3,328 wizyt
0 głosów
1 odpowiedź 668 wizyt
0 głosów
2 odpowiedzi 1,244 wizyt

92,975 zapytań

141,939 odpowiedzi

321,181 komentarzy

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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...