Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Obsługa plików - problem

Ostatnio zmodyfikowano 2010-09-02 19:54
Autor Wiadomość
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:


C/C++
#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 );
}
P-21619
DejaVu
» 2010-09-02 16:18:26
C/C++
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.
P-21621
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()).
P-21626
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:)
P-21638
SeaMonster131
» 2010-09-02 19:51:11
b) np tak:
C/C++
plik.open( "pliki\tekst.txt", ios::in | ios::out );
//albo
plik.open( "jakisfolder\media\pliki\tekstowe\dane.ini", ios::in | ios::out );
//itd ...
P-21639
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 \\
C/C++
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    string zaw;
    ifstream in( "folder\\plik.txt" );
    while( in >> zaw ) cout << zaw << " ";
   
    in.close();
}
P-21642
« 1 »
  Strona 1 z 1