Obsługa plików - problem
Ostatnio zmodyfikowano 2010-09-02 19:54
Dawidsoni Temat założony przez niniejszego użytkownika |
Obsługa plików - problem » 2010-09-02 16:07:31 Witam. Mam następujący problem: zapisanie do pliku danych. Program ma najpierw wczytywać plik i przekazywać to do zmiennej (a), a następnie jeśli plik jest pusty ponownie wczytać zmienną (a) i zapisać ją do zmiennej plikowej (plik)(zapisać to do pliku).
Jak robię same zapisywanie/wczytywanie to nie ma problemu. Problem następuje dopiero gdy łącze wczytywanie i zapisywanie.
Proszę o pomoc/poprawę i wytłumaczenie mojego błędu. Z góry dzięki:). Kod znajduje się poniżej:
#include<iostream> #include<fstream> int main() { using namespace std; fstream plik; string a; plik.open( "plik.txt", ios::in | ios::out ); if( plik.good() == true ) { plik >> a; if( a == "" ) { cin >> a; plik << a; } } getch(); return( 0 ); } |
|
DejaVu |
» 2010-09-02 16:18:26 if( !( plik >> a ) ) { cin >> a; plik << a; }
Być może zadziała, niemniej jednak proponuję wczytać plik, zamknąć go, a potem otworzyć do zapisu, zapisać i zamknąć. Wiem, że dawniej miałem problemy gdy łączyłem flagi std::ios::in i std::ios::out. Nie dochodziłem jednak przyczyny. |
|
Elaine |
» 2010-09-02 16:47:40 @OP: jeśli ze strumienia z jakiegoś powodu nic nie zostanie odczytane, to ustawiany jest failbit. Przed ponownym użyciem strumienia wypada wyczyścić flagi błędu (metoda clear()). |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2010-09-02 19:39:41 Dzięki! Metoda clear() działa bardzo dobrze. Mam jeszcze 2 pytania: a) Czy zawsze przed wykonaniem nowej czynności muszę używać tej metody(clear())? b) Jak wczytywać pliki, które znajdują się w jakimś folderze, w którym nie pracujemy? np. \pliki\text.txt? Proszę o kilka różnych przykładów. Z góry dzięki:) |
|
SeaMonster131 |
» 2010-09-02 19:51:11 b) np tak: plik.open( "pliki\tekst.txt", ios::in | ios::out );
plik.open( "jakisfolder\media\pliki\tekstowe\dane.ini", ios::in | ios::out );
|
|
ison |
» 2010-09-02 19:54:07 a) niedawno pisałem na tym forum już o tym ;p fstream przy napotkaniu jakiegokolwiek błędu lub końca pliku nie chce dalej współpracować aż wyczyścisz bufor błędu poprzez wyżej wymienioną metodę b) zwyczajnie oddzielasz je przez \\ #include <iostream> #include <fstream>
using namespace std;
int main() { string zaw; ifstream in( "folder\\plik.txt" ); while( in >> zaw ) cout << zaw << " "; in.close(); }
|
|
« 1 » |