2011-05-18 62 views
18

Xin chào mọi người, tôi mới bắt đầu học C++ và tôi muốn biết cách đọc và ghi vào một tập tin văn bản. Tôi đã thấy nhiều ví dụ nhưng tất cả họ đều khó hiểu/theo dõi và tất cả đều đa dạng. Tôi đã hy vọng rằng ai đó ở đây có thể giúp đỡ. Tôi là một người mới bắt đầu, vì vậy tôi cần hướng dẫn rõ ràng. Dưới đây là ví dụ về những gì tôi đang cố gắng làm:Cách đọc và ghi vào một tệp văn bản trong 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

Mà C++ cuốn sách bạn đang học từ đâu? –

Trả lời

2

Để đọc bạn nên tạo một thể hiện ifsteam và không phải của luồng.

ifstream iusrfile; 

Bạn nên mở tệp ở chế độ đọc.

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

Tuyên bố này cũng không chính xác.

cout<<iusrfile; 

Nếu bạn đang cố gắng để in các dữ liệu mà bạn đọc từ tập tin bạn nên làm:

cout<<usr; 

Bạn có thể đọc thêm về ifstream và API của nó here

+2

ifstreams luôn được mở ở chế độ đầu vào –

+0

Tôi đồng ý rằng không cần phải chuyển sang chế độ như ifstream :: in là tham số mặc định cho ifstream :: open, nhưng tôi nghĩ một ý tưởng hay là đề cập rõ ràng nó. – user258808

+0

Oh yeah whoops, "ofstream iusrfile" được cho là "ifstream iusrfile". Và cảm ơn sự giúp đỡ về câu lệnh cout. – Nate

9

Nhìn vào this tutorial hoặc this one, chúng đều khá đơn giản. Nếu bạn quan tâm đến một giải pháp thay thế, đây là cách bạn làm file I/O in C.

Một số điều cần lưu ý, hãy sử dụng dấu ngoặc đơn ' khi xử lý các ký tự đơn và tăng gấp đôi " cho chuỗi. Ngoài ra nó là một thói quen xấu để sử dụng global variables khi không cần thiết.

Hãy vui vẻ!

38

file header cần thiết:

#include <iostream> 
#include <fstream> 

tuyên bố dòng tập tin đầu vào:

ifstream in("in.txt"); 

khai báo tập tin đầu ra dòng:

ofstream out("out.txt"); 

nếu bạn muốn sử dụng biến cho một tên tập tin, thay vì hardcoding nó, sử dụng này:

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

đọc từ tập tin vào biến (giả định tập tin có 2 int biến trong):

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

hay, đọc một dòng trong một thời gian từ file:

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

ghi biến trở lại file :

out << num1 << num2; 

đóng các tệp:

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

Tôi không thấy lý do tại sao điều này đã được giảm giá, ngoại trừ việc bạn tham chiếu đến các tệp tiêu đề dưới dạng thư viện, chúng không phải là. Dù sao, +1 cho một nỗ lực hợp lý để giải thích làm thế nào để làm I/O đúng cách. –

+0

@Neil Butterworth Tôi không hiểu những gì downvote là cho, nhưng hạnh phúc cho bất kỳ thông tin phản hồi. Mọi người, nếu bạn donwvote - thats ok, nhưng xin vui lòng nói lý do tại sao, mà mang lại cho tôi một cơ hội để cải thiện. Cảm ơn Neil cho upvote! –

3

Cơ chế mặc định C++ cho tệp IO được gọi là luồng. Các luồng có thể có ba loại: đầu vào, đầu ra và đầu vào. Luồng đầu vào hoạt động như nguồn dữ liệu. Để đọc dữ liệu từ một input stream bạn sử dụng >> điều hành:

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

hành >> hoạt động khác nhau với nhiều loại khác nhau. Nếu trong ví dụ trên my_variable là một int, sau đó một số sẽ được đọc từ strem, nếu my_variable là một chuỗi, sau đó một từ sẽ được đọc, v.v. Bạn có thể đọc thêm sau đó một giá trị từ luồng bằng cách viết istream >> a >> b >> c; a, b và c sẽ là biến của bạn.

Luồng đầu ra hoạt động như bồn rửa mà bạn có thể ghi dữ liệu của mình. Để ghi dữ liệu của bạn vào luồng, hãy sử dụng toán tử <<.

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

Như với dòng đầu vào, bạn có thể viết một vài giá trị vào dòng bằng cách viết một cái gì đó như thế này:

ostream << a << b << c; 

Rõ ràng inputoutput suối có thể đóng vai trò như cả hai.

Trong mẫu mã của bạn, bạn sử dụng đối tượng luồng coutcin. cout là viết tắt của console-output và cin cho console-input. Đó là các luồng được xác định trước để tương tác với bảng điều khiển mặc định.

Để tương tác với tệp, bạn cần sử dụng các loại ifstreamofstream. Tương tự như cincout, ifstream là viết tắt của input-file-streamofstream là viết tắt của output-file-stream.

Mã của bạn có thể trông như thế này:

#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; 
} 

Để đọc thêm bạn có thể muốn nhìn vào c++ I/O reference

Các vấn đề liên quan