Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

dmn

[C++] fstream - tworzenie, zapisywanie i modyfikacja pliku

Polecane posty

mam taki programik pokazujący jak zapisywac do pliku i go modyfikowac:

#include <fstream>  
</P>  #include <iostream>  
  using namespace std;  
    
  int main() //zwraca 1 w przypadku bledu  
  {  
      char fileName[80];  
      char buffer[255];  
       cout << "Prosze podac nazwe pliku: ";  
      cin >> fileName;  
    
      ifstream fin(fileName);  
      if (fin) //czy juz istnieje?  
      {  
          cout << "Biezaca zawartosc pliku:n";  
          char ch;  
          while (fin.get(ch))  
              cout << ch;  
          cout << "***Koniec zawartosci pliku***n";  
      }  
      fin.close();  
    
      cout << "nOtwieranie " << fileName << " w trybie dopisywania...n";  
    
      ofstream fout(fileName,ios::app);  
      if (!fout)  
      {  
          cout << "Nie mozna otworzyc " << fileName << " do dopisywania.n";  
          return(1);  
      }  
    
      cout << "Wpisz tekst dla pliku: ";  
      cin.ignore(1,'n');  
      cin.getline(buffer,255);  
      fout << buffer << "n";  
      [b]fout.close(); //zamykamy plik do zapisu  
    
      fin.open(fileName); //ponownie przypisujemy istniejacy obiekt fin!  
      if (!fin)  
      {  
           cout << "Nie mozna otworzyc " << fileName << " do odczytu\n";  [/b]
          return(1);  
      }  
    
      cout << "nOto zawartosc pliku:n";  
      char ch;  
      while (fin.get(ch))  
          cout << ch;  
      cout << "***Koniec zawartosci pliku***n";  
      fin.close();  
<P>  }

 

problem w tym ze po wpisaniu tekstu do pliku nie zamyka go.to ten fragment:

fout << buffer << "n";  
       fout.close();

przez co w nastepnym poleceniu (  fin.open(fileName); )  jest błąd.

pomoglby ktos dojść do powodów, dlaczego obiekt 'fin' nie moze być odczytany?

(swoją drogą jak numerowac wiersze w poście? łatwiej by bylo ;)

Link do komentarza
Udostępnij na innych stronach

Obiekt fin nie daje się ponownie otworzyć, ponieważ przy okazji jednej z poprzednich operacji spowodował błąd.

Zamień

fin.open(fileName); //ponownie przypisujemy istniejacy obiekt fin!

na

    if (false == fin.good())
    {
        fin.clear();
    }
    fin.open(fileName); //ponownie przypisujemy istniejacy obiekt fin!

Link do komentarza
Udostępnij na innych stronach

dzieki , teraz hula bez zarzutu ;D

czyli samo zamkniecie obiektu ifstream za pomocą close() niewiele daje jesli chce w dalszej czesci z niego skorzystac jeszcze?

znaczy ze w książce z ktorej sie ucze jest błąd ktorego nie ma w erratach ;>

( gdyby ktos sie tez z tym spotkal to listing 17.17 z 'C++ dla kazdego')

Link do komentarza
Udostępnij na innych stronach

Trzeba by przeanalizować kiedy pojawia się błąd. Być może winna jest któraś z operacji przed close.

Metoda close daje tyle, że program zamyka uchwyt do pliku. W przypadku plików wejściowych oznacza to zwolnienie zasobów zaalokowanych przez system operacyjny i umożliwienie otwarcia pliku przez inne procesy (jeżeli korzystaliśmy z jakiejś formy blokowania dostępu). W przypadku plików wyjściowych sterownik systemu plików powinien również zapisać na dysku ostateczną wersję pliku.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...