2011-05-18 16 views
18

Hej wszystkim, właśnie zacząłem uczyć się C++ i chciałem wiedzieć, jak czytać i pisać do pliku tekstowego. Widziałem wiele przykładów, ale wszystkie były trudne do zrozumienia/naśladowania i wszystkie były różne. Miałem nadzieję, że ktoś tu może pomóc. Jestem totalnym początkującym, więc potrzebuję jasnych instrukcji. Oto przykład tego, co próbuję zrobić:Jak czytać i pisać do pliku tekstowego w C++?

#include <iostream> 
#include <fstream> 
using namespace std; 
string usreq, usr, yn, usrenter; 
int start() 
{ 
    cout << "Welcome..." 
int main() 
{ 
    cout << "Is this your first time using TEST" << endl; 
    cin >> yn; 
    if (yn == "y") 
     { 
      ofstream iusrfile; 
      ofstream ousrfile; 
      iusrfile.open("usrfile.txt", "w"); 
      iusrfile >> usr; 
      cout << iusrfile; 
      iusrfile.close(); 
      cout << "Please type your Username. \n"; 
      cin >> usrenter; 
      if (usrenter == usr) 
      { 
      start(); 
      } 
     } 
    else 
     { 
      cout << "THAT IS NOT A REGISTERED USERNAME."; 
     } 

    return 0; 

} 
+3

Które C++ książki uczysz od? –

Odpowiedz

2

Aby odczytać należy utworzyć instancję ifsteam i nie ofstream.

ifstream iusrfile; 

Powinieneś otworzyć plik w trybie do odczytu.

iusrfile.open("usrfile.txt", ifstream::in); 

Również to stwierdzenie nie jest poprawne.

cout<<iusrfile; 

Jeśli próbujesz wydrukować dane odczytywane z pliku należy zrobić:

cout<<usr; 

Możesz przeczytać więcej o ifstream i jego API here

+2

ifstreams są zawsze otwarte w trybie wejściowym –

+0

Zgadzam się, że nie ma potrzeby przekazywania trybu tak, jakby if :: in był domyślnym parametrem dla ifstream :: open, ale myślę, że jest to dobry pomysł, aby wyraźnie o nim wspomnieć. – user258808

+0

Oh yeah whoops, "ofstream iusrfile" miał być "ifstream iusrfile". I dzięki za pomoc w oświadczeniu cout. – Nate

9

spojrzeć na this tutorial lub this one, oba są dość proste. Jeśli jesteś zainteresowany alternatywą, to w ten sposób wykonujesz file I/O in C.

Należy pamiętać o kilku rzeczach: jedne cudzysłowy ' w przypadku pojedynczych znaków i podwójne " dla ciągów. Poza tym jest to zły nawyk, aby używać global variables, gdy nie jest to konieczne.

Miłej zabawy!

38

Pliki nagłówkowe potrzebne:

#include <iostream> 
#include <fstream> 

zadeklarować pliku wejściowego strumienia:

ifstream in("in.txt"); 

Declare pliku wyjściowego strumienia:

ofstream out("out.txt"); 

jeśli chcesz używać zmiennej o nazwie pliku, zamiast go kodować, użyj tego:

string file_name = "my_file.txt"; 
ifstream in2(file_name.c_str()); 

odczytu z pliku do zmiennych (zakładamy plik ma 2 int zmiennych):

int num1,num2; 
in >> num1 >> num2; 

lub czytania linii czasu z pliku:

string line; 
while(getline(in,line)){ 
//do something with the line 
} 

zmienne odpisać do pliku :

out << num1 << num2; 

zamknąć pliki:

in.close(); 
out.close(); 
+1

Nie widzę powodu, dla którego to zostało odrzucone, z wyjątkiem tego, że odwołujesz się do plików nagłówkowych jako bibliotek, których nie ma. W każdym razie +1 za uzasadnioną próbę poprawnego wyjaśnienia, jak poprawnie wykonać operacje we/wy. –

+0

@Neil Butterworth Nie rozumiem, o co chodziło, ale cieszę się z wszelkich opinii. Ludzie, jeśli donwvote - to jest ok, ale proszę powiedz dlaczego, to daje mi szansę na poprawę. Dziękuję Neilowi ​​za awans! –

3

Domyślny mechanizm C++ dla pliku IO nazywa się strumieniami. Strumienie mogą mieć trzy smaki: wejściową, wyjściową i wejściową. Strumienie wejściowe działają jak źródła danych. Aby odczytać dane ze strumienia wejściowego użyć >> operatora:

istream >> my_variable; //This code will read a value from stream into your variable. 

Operatora >> działa różny dla różnych typów. Jeśli w powyższym przykładzie my_variable byłaby int, to liczba zostanie odczytana ze strema, jeśli my_variable był łańcuchem, to zostanie odczytane słowo, itp. Możesz przeczytać więcej niż jedną wartość ze strumienia, pisząc istream >> a >> b >> c; gdzie a, b i c będą twoimi zmiennymi.

Strumienie wyjściowe działają jak zlew, do którego można zapisać dane. Aby zapisać swoje dane w strumieniu, użyj operatora <<.

ostream << my_variable; //This code will write a value from your variable into stream. 

Jako ze strumieni wejściowych, można napisać kilka wartości do strumienia pisząc coś takiego:

ostream << a << b << c; 

Oczywiście inputoutput strumienie mogą pełnić zarówno.

W kodzie przykładowym używane są obiekty strumieniowe cout i cin. cout oznacza wyjście konsolowe i cin dla console-input. Są to predefiniowane strumienie do interakcji z domyślną konsolą. Aby uzyskać interakcję z plikami, należy używać typów ifstream i ofstream. Podobny do cin i cout, ifstream oznacza input-file-stream i ofstream oznacza output-file-stream.

Twój kod może wyglądać następująco:

#include <iostream> 
#include <fstream> 

using namespace std; 

int start() 
{ 
    cout << "Welcome..."; 

    // do fancy stuff 

    return 0; 
} 

int main() 
{ 
    string usreq, usr, yn, usrenter; 

    cout << "Is this your first time using TEST" << endl; 
    cin >> yn; 
    if (yn == "y") 
    { 
     ifstream iusrfile; 
     ofstream ousrfile; 
     iusrfile.open("usrfile.txt"); 
     iusrfile >> usr; 
     cout << iusrfile; // I'm not sure what are you trying to do here, perhaps print iusrfile contents? 
     iusrfile.close(); 
     cout << "Please type your Username. \n"; 
     cin >> usrenter; 
     if (usrenter == usr) 
     { 
      start(); 
     } 
    } 
    else 
    { 
     cout << "THAT IS NOT A REGISTERED USERNAME."; 
    } 

    return 0; 
} 

Dla dalszego czytania warto spojrzeć na c++ I/O reference

Powiązane problemy