Strona 1 z 1

[C++] zapis odczyt pliku, 2 sposoby

: 23 kwie 2016, o 14:52
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?

[C++] zapis odczyt pliku, 2 sposoby

: 24 kwie 2016, o 22:03
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

[C++] zapis odczyt pliku, 2 sposoby

: 25 kwie 2016, o 00:53
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(...);