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 » |