2011-05-18 49 views
18

嘿大家好,我剛開始學習C++,我想知道如何讀寫文本文件。我看到了很多例子,但他們都很難理解/遵循,而且他們各有不同。我希望有人在這裏可以提供幫助。我是一個初學者,所以我需要清楚的說明。這裏是我想要做的一個例子:如何讀寫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

哪些C++的書,您在學習? – 2011-05-18 22:52:22

回答

2

要讀你應該創建一個ifsteam而不是ofstream的實例。

ifstream iusrfile; 

您應該以讀取模式打開文件。

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

此外,這種說法是不正確的。

cout<<iusrfile; 

如果你要打印你從文件中讀取數據時,你應該做的:

cout<<usr; 

你可以閱讀更多關於ifstream的和它的API here

+2

ifstreams總是以輸入模式打開 – 2011-05-18 22:51:55

+0

我同意不需要傳遞模式,因爲ifstream :: in是ifstream :: open的默認參數,但我認爲明確提及它是個好主意。 – user258808 2011-05-18 22:53:41

+0

Oh yeah哎呀,「ofstream iusrfile」應該是「ifstream iusrfile」。並感謝cout聲明的幫助。 – Nate 2011-05-18 23:43:21

9

this tutorialthis one,它們都很簡單。如果您對替代品感興趣,請點擊這裏file I/O in C

有些事情要記住,在處理單個字符時使用單引號',對字符串使用雙號"。在不需要時使用global variables也是一種壞習慣。

玩得開心!需要

38

頭文件:

#include <iostream> 
#include <fstream> 

聲明輸入文件流:

ifstream in("in.txt"); 

聲明輸出文件流:

ofstream out("out.txt"); 
如果你想使用變量文件名

,而不是硬編碼它,使用這個:

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

從文件讀入的變量(假設文件有2個INT變量):

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

,或者從文件中讀取的線的時間:

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

寫變量回到文件:

out << num1 << num2; 

關閉文件:

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

我不明白爲什麼這是downvoted,除了你把頭文件稱爲庫,他們不是。無論如何,+1可以合理地解釋如何正確執行I/O。 – 2011-05-18 23:45:28

+0

@Neil Butterworth我不明白downvote是什麼,但很高興爲任何反饋。人們,如果你不願意 - 那沒問題,但請說出原因,這給了我一個改進的機會。感謝Neil爲upvote! – 2011-05-19 00:41:22

3

文件IO的默認C++機制稱爲流。流可以有三種風格:輸入,輸出和輸入輸出。輸入流就像數據源一樣起作用。從輸入流中讀取數據使用>>操作:

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

操作>>行爲對不同類型不同。如果在上述my_variable的例子是一個int,然後一個數字將從中sTREM讀,如果my_variable是一個字符串,然後一個字將被讀等 您可以從流通過寫istream >> a >> b >> c;哪裏讀超過一個值a,b和c將是你的變量。

輸出流,像沉到,你可以寫你的數據。要將數據寫入流,請使用<<運算符。顯然

ostream << a << b << c; 

投入產出流可以既充當:

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

與輸入流,你可以通過寫這樣的事情寫幾個值到流。

在您的代碼示例使用coutcin流對象。 cout代表控制檯輸出和CIN爲console-input。這些是預定義的流,用於與默認控制檯進行交互。

與文件進行交互,就需要使用ifstreamofstream類型。 類似於cincoutifstream代表input-file-streamofstream代表output-file-stream

您的代碼可能是這樣的:

#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++ I/O reference