Skocz do zawartości

[C] Pliki i null


Jaklub

Rekomendowane odpowiedzi

Wiecie może, czemu gdy próbuję wczytać plik za pomocą fopen, zawsze wychodzi null nawet wtedy, gdy próbuję coś zapisać do pliku (a plik jest w katalogu)? Nie jestem zbyt dobry w C, więc pytam (na razie to mój jedyny problem, a google i i wikibooks jakoś nie pomaga, chyba że jakimś cudem coś przeoczyłem). Z góry dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

FILE* pFile;
pFile=fopen ("plik.txt","r");
if(pFile!=NULL)
{
// odczyt danych
fclose(pFile);
}

Odnośnik do komentarza
Udostępnij na innych stronach

Pokaz mi ten kod ladujacy i kiedy go uzywasz, to sie sprawdzi co nie tak

PS. moze wywalac NULL jesli plik nie istnieje. upewnij sie ze sciezka jest prawidlowa

Odnośnik do komentarza
Udostępnij na innych stronach

PS. moze wywalac NULL jesli plik nie istnieje. upewnij sie ze sciezka jest prawidlowa

Nawet kiedy próbuję zapisać do pliku za pomocą file=fopen("plik.txt","w"); ?

Ze względu na to, że aplikacja nie robi nic przy odczytywaniu, ale zacina się przy zapisywaniu, kod na zapisywanie:

FILE * pFile;
pFile = fopen ( "save.sav" , "w" );
fprintf (pFile, "%d/n%d/n%d/n%d",lives,score,levelid,yoshisat);
fclose (pFile);

Nieużywany w pętlach.

Na pewno fprintf nie jest winne, ponieważ po jego skasowaniu kod wciąż nie działa.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja Ci proponuje zrezygnowac z zapisu znakowego, a uzyc binarnego:

FILE * pFile;
pFile = fopen ( "save.sav" , "wb" );
fwrite(&lives,sizeof(double),1,pFile);
fwrite(&score,sizeof(double),1,pFile);
fwrite(&levelid,sizeof(double),1,pFile);
fwrite(&yoshisat,sizeof(double),1,pFile);
fclose (pFile);

A potem odczyt tego:

FILE * pFile;
pFile = fopen ( "save.sav" , "rb+" );
if(pFile!=NULL)
{
fread(&lives,sizeof(double),1,pFile);
fread(&score,sizeof(double),1,pFile);
fread(&levelid,sizeof(double),1,pFile);
fread(&yoshisat,sizeof(double),1,pFile);
fclose(pFile);
}

Odnośnik do komentarza
Udostępnij na innych stronach

fstream sa jeszcze, orazfunkcje obslugi plikow w WINAPI

Edit: Zapodaj mi na PW plik cpp to sprawdze, bo to musi byc cos ze zmiennymi (i zapewne ograniczeniem zasiegu zmiennej)

Odnośnik do komentarza
Udostępnij na innych stronach

@UP: Fakt xD Ale tak czy inaczej, zagladajac w kod ktory podeslal zauwazylem brak gdziekolwiek indziej w kodzie zmiennych ktore chce zapisac. Ciekaw jestem jakiego IDE i kompilatora uzywa.

Poprawka: juz wiem i przyznam ze zle ich szukalem xD Tyle ze tam te zmienne sa typu int a On chcial je odczytywac jako double. po prostu w kodzie zapisu i odczytu tam gdzie masz sizeof(double) zamien na sizeof(int) i pomoze :)

Odnośnik do komentarza
Udostępnij na innych stronach

Czy możesz otworzyć jakikolwiek plik, który istnieje? Dzieje się tak dla każdego pliku? Czy próbujesz otwierać podając całą ścieżkę?

Zawsze nic nie odczytuje, a jeśli coś próbuję zapisać, program się zacina.

Odnośnik do komentarza
Udostępnij na innych stronach

Jakie IDE? Co mówi Debugger? Prześlij projekt lub większy fragment pliku.. Jeśli w innych projektach działa trzeba przestudiować debuggerem

IDE: Dev-C++

Użycie debuggera jest chyba niemożliwe (projekt pod inną platformę).

 

Spróbowałem inaczej poradzić sobie z problemem: za pomocą errno, ale program zawsze zwraca 0, a skrypt nie działa. Jaka może być tego przyczyna? Kod podam za chwilę.

 

edit:

int load() {
FILE *f = fopen("save.sav", "r");
if (f==NULL) {
      oslStartDrawing();
      oslSetTextColor(RGBA(255,255,255,255));
      oslSetBkColor(RGBA(0,0,0,0));
      oslPrintf_xy(0,20,"error %i",errno);
      oslSyncFrame();
      oslEndDrawing();
      }
      else
      {
      oslStartDrawing();
      oslSetTextColor(RGBA(255,255,255,255));
      oslSetBkColor(RGBA(0,0,0,0));
      oslPrintf_xy(0,20,"yase");
      oslSyncFrame();
      oslEndDrawing();
      fclose(f);
      }
while(1) {
oslReadKeys();
if (osl_keys->pressed.cross) { mainmenu(); }
}
}

w include jest errno.h i parę innych plików

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...