Jaklub Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 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.
PsichiX Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 FILE* pFile; pFile=fopen ("plik.txt","r"); if(pFile!=NULL) { // odczyt danych fclose(pFile); }
Jaklub Opublikowano 21 Grudnia 2008 Autor Opublikowano 21 Grudnia 2008 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).
PsichiX Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 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
Jaklub Opublikowano 21 Grudnia 2008 Autor Opublikowano 21 Grudnia 2008 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.
PsichiX Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 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); }
Jaklub Opublikowano 21 Grudnia 2008 Autor Opublikowano 21 Grudnia 2008 Użyłem tego kodu zapisywania i oczywiście się zacięło. Jest jakaś alternatywa do obsługi plików?
PsichiX Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 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)
Konrad-GM Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 Chciałbym zauważyć że w C nie ma C++owego fstream :) A jeszcze bardziej brakuje plików cpp ;p
PsichiX Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 @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 :)
Jaklub Opublikowano 21 Grudnia 2008 Autor Opublikowano 21 Grudnia 2008 Wciąż się zacina. :[ Chyba spróbuję wygooglować jakąś jeszcze inną metodę.
Will Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 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ę?
Jaklub Opublikowano 21 Grudnia 2008 Autor Opublikowano 21 Grudnia 2008 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.
Will Opublikowano 21 Grudnia 2008 Opublikowano 21 Grudnia 2008 Jakie IDE? Co mówi Debugger? Prześlij projekt lub większy fragment pliku.. Jeśli w innych projektach działa trzeba przestudiować debuggerem
Jaklub Opublikowano 24 Grudnia 2008 Autor Opublikowano 24 Grudnia 2008 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
Rekomendowane odpowiedzi
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ę