Sprawdzanie czy dany plik tekstowy jest w folderze

Odpowiedz Nowy wątek
2019-01-20 20:47
0

Witam, mam zadanie w którym mam napisać program odczytujący wszystkie znaki wybranego przez użytkownika pliku tekstowego. Pierwszą rzeczą którą chce zrobić to sprawdzanie czy plik tekstowy istnieje a ciężko dokopać jest mi się do jakichś konkretnych materiałów na ten temat.

Czy może ktoś mi pomóc z tym kodem ?

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

main()
{
    char fname[10];
    int check=0;

    printf("Podaj nazwe pliku wraz z rozszerzeniem:\n");
    scanf("%s",&fname);
    printf("\n%s",fname);
    FILE *plik;
    if(plik=fopen(fname,"r"))
    {
        fclose(fname);
        check=1;
        printf("%i",check);
        system("PAUSE");

    }

    else
    {
        printf("\nNie ma takego pliku !!! \n");
        system("PAUSE");
    }

    return 0;
}
edytowany 1x, ostatnio: kq, 2019-01-20 20:48

Pozostało 580 znaków

2019-01-20 20:59
0

A jaki jest konkretnie problem? Sprawdzi czy plik istnieje można na kilka sposobów, np. tak jak Twoim kodzie sprawdzając co zwróci fopen. Chcesz znać inne sposoby na sprawdzenie czy plik istnieje?


edytowany 1x, ostatnio: rrowniak, 2019-01-20 21:00

Pozostało 580 znaków

2019-01-20 21:01
0

Chodzi o to że ten kod nie działa, zawsze zwraca mi że nie istnieje ; /

Pozostało 580 znaków

2019-01-20 21:03
0

scanf("%s",&fname); => scanf("%s",fname);
fclose(fname); => fclose(plik);

Pozostało 580 znaków

2019-01-20 21:06
0

Po pierwsze tablica char fname[10]; jest trochę za krótka jak na bufor z nazwą pliku + ewentualnie pełną ścieżka. Druga sprawa, jak zamykasz plik to nie podajesz do funkcji fclose nazwy pliku tylko wskażnik FILE.

Próbowałeś podawać pełną ścieżkę do pliku? Czy plik jest w tym samym katalogu z którego uruchomiłeś program?

EDIT: A @Delor znalazł kluczowy problem.


edytowany 1x, ostatnio: rrowniak, 2019-01-20 21:07

Pozostało 580 znaków

2019-01-20 21:17
0

Dalej wyskakuje ze nie ma takiego pliku ;/
Nie próbowałem podawać ścieżki pliku ale plik jest w tym samym katalogu więc nie powinien ;/

poprawiony kod:

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

main()
{
    char fname[10];
    int check=0;

    printf("Podaj nazwe pliku wraz z rozszerzeniem:\n");
    scanf("%s",fname);
    printf("\n%s",fname);
    FILE *plik;
    if(plik=fopen(fname,"r"))
    {
        fclose(plik);
        check=1;
        printf("%i",check);
        system("PAUSE");

    }

    else
    {
        printf("\nNie ma takego pliku !!! \n");
        system("PAUSE");
    }

    return 0;
}

Pozostało 580 znaków

2019-01-20 21:34
0

Podepnij debugger - będziesz wiedział co się dzieje. Spróbuj również z pełną ścieżką.


Pozostało 580 znaków

2019-01-20 21:39
0

Szczerze mówiąc dopiero sie ucze i nie uzywałem nigdy debugger`a . Z podaną ścieżką też nie działa ;/ nie wiem w czym może tkwić problem

Czyli podając pełną ścieżkę udało Ci się zmieścić w 9 znakach? Bo na tyle pozwala Ci fname... - rrowniak 2019-01-20 21:45
Zwiększam rezerwowane miejsce dla fname - Pabloo111 2019-01-20 22:16
SOA #1. char fname[MAX_PATH]; i sprawdź dokładnie w jakim folderze uruchamia się program. Niekoniecznie jest to folder z plikiem exe. - Delor 2019-01-20 22:40
Doszedłem do tego metodą prób i błędów, nie trzeba było dodawać ścieżki a rozwiązanie zamieszczam w kodzie poniżej. - Pabloo111 2019-01-21 01:12

Pozostało 580 znaków

2019-01-21 01:13
FILE *plik=fopen(("%s",fname) ,"r");
    if(plik==NULL)
edytowany 1x, ostatnio: Pabloo111, 2019-01-21 01:14

Pozostało 580 znaków

2019-01-21 09:05
0

Twoje rozwiązanie odpowiada temu:

FILE *plik=fopen(fname ,"r");
if(plik==NULL)

czyli jest równoważne temu:

FILE *plik;
if(plik=fopen(fname,"r")==NULL)

Oryginalnie miałeś:

FILE *plik;
if(plik=fopen(fname,"r"))

co odpowiada:

FILE *plik;
if(plik=fopen(fname,"r")!=NULL)

Zanegowałeś tylko warunek.
Błędy miałeś w innych miejscach.

Swoją drogą ("%s",fname) jako argument fopen zaciemnia tylko kod. Wartość po lewej nic nie zrobi a do funkcji przekazana zostanie tylko wartość po prawej stronie przecinka.

Ok tylko że po poprawieniu błędów dalej nie działało(ten kod co napisałeś ) a przy tym zapisie działa 🙂Mi się wydaje że program przy poprzednim zapisie nie szukał tego co jest w zmiennej tylko nazwy zmiennej dlatego nie widział plików tekstowych. Nawet przy odniesieniu się do adresu zmiennej - Pabloo111 2019-01-21 16:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot (3x)