[C++] zapis odczyt pliku, 2 sposoby

Awatar użytkownika
alchem
Użytkownik
Użytkownik
Posty: 252
Rejestracja: 10 cze 2014, o 19:10
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 83 razy
Pomógł: 5 razy

[C++] zapis odczyt pliku, 2 sposoby

Post autor: alchem »

Witam, patrząc niedawno w kursy z C++ natknąłem się na taką metodę otwierania pliku:

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{
   std::fstream plik;

   plik.open( "C:/Users/User/Desktop/4/liczby.txt", std::ios::in);
   if( plik.good() == true )
    {
    std::cout << "Uzyskano dostep do pliku!" << std::endl;




    plik.close();
    }
   else std::cout << "Prawdopodobnie nie ma takiego pliku! " << std::endl;





    return EXIT_SUCCESS;
}
A ost na wykładzie mieliśmy coś w podobnie do tego:

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <cstdlib>

//using namespace std;

int main()
{
   std::ifstream plik ("C:/Users/User/Desktop/4/liczby.txt");
   if(plik)
   {
       std::cout << " Udalo sie otworzyc plik"<<std::endl;
   }





    return EXIT_SUCCESS;
}


Może mi ktoś powiedzieć czy różnią się te dwie metody?
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[C++] zapis odczyt pliku, 2 sposoby

Post autor: lukequaint »

Właściwie to niczym. Pierwszy sposób jest bardziej "surowy" i jawny. Przypisujemy w nim plik do strumienia poprzez wywołanie metody open i sprawdzamy stan metodą good. W drugim natomiast przypisujemy plik już w wywołaniu konstruktora i sprawdzamy stan, korzystając z faktu, że obiekty *stream (czyli strumienie) konwertują się do typu bool (jest dla nich zdefiniowany operator bool). W pierwszym listingu jawnie też zamykamy plik - w drugim plik jest zamykany w destruktorze, czyli po wyjściu z aktualnego zasięgu (w tym przypadku przy zakończeniu programu).

Konwersja do typu bool daje te same wartości, co wywołanie metody good:
... rator_bool

Dokładniej, to konstruktor strumienia wywołuje pod spodem właśnie metodę open (druga deklaracja):
... ic_fstream
Gouranga
Użytkownik
Użytkownik
Posty: 1592
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[C++] zapis odczyt pliku, 2 sposoby

Post autor: Gouranga »

Jest natomiast różnica między tym co opisujesz, a takim rozwiązaniem:

Kod: Zaznacz cały

#include <cstdlib>
#include <cstdio>
...
FILE *plik = fopen("C:plik.txt", "a+");
fscanf(...);
fprintf(...);
ODPOWIEDZ