Skocz do zawartości

[C] Pliki i null


Rekomendowane odpowiedzi

Opublikowano

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.

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

Opublikowano

PsichiX: Właśnie to mi nie działa. Czemu - nie mam zielonego pojęcia (podczas gdy dokładnie to samo w innych projektach działa dobrze).

Opublikowano

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

Opublikowano
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.

Opublikowano

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);
}

Opublikowano

Użyłem tego kodu zapisywania i oczywiście się zacięło. Jest jakaś alternatywa do obsługi plików?

Opublikowano

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)

Opublikowano

@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 :)

Opublikowano

Wciąż się zacina. :[ Chyba spróbuję wygooglować jakąś jeszcze inną metodę.

Opublikowano

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ę?

Opublikowano
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.

Opublikowano

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

Opublikowano
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

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ę...