2010-07-25 78 views
1

我想打開一個文件並從中讀取一行。文件中只有一行,所以我不需要擔心循環,但爲了將來的參考,知道如何讀取多行文件會很好。如何在C++中使用ifstream打開並讀取文件?

int main(int argc, const char* argv[]) { 

    // argv[1] holds the file name from the command prompt 

    int number = 0; // number must be positive! 

    // create input file stream and open file 
    ifstream ifs; 
    ifs.open(argv[1]); 

    if (ifs == NULL) { 
     // Unable to open file 
     exit(1); 
    } else { 
     // file opened 
     // read file and get number 
     ...? 
     // done using file, close it 
     ifs.close(); 
    } 
} 

我該怎麼做?另外,我是否正確處理打開文件是否成功?

謝謝。

+2

您是否擁有C++書?如果是這樣,你看看它討論標準I/O庫的章節嗎?如果不是,我強烈建議您閱讀[The Definitive C++ Book Guide and List](http://stackoverflow.com/questions/388242/)中列出的介紹性書籍之一。 – 2010-07-25 02:04:51

+0

我沒有C++書。我在看http://www.cplusplus.com/reference/iostream/istream/getline/,我被'streamsize n'參數搞糊塗了。 – Hristo 2010-07-25 02:29:53

+0

如果你點擊'streamsize'頁面,它會說:「這個類型是一個實現定義的同義詞之一,它是一個有符號的基本整型(通常是帶符號的int或有符號的長整型)。」 – 2010-07-25 05:30:05

回答

5

幾件事情:

  1. 你可以閱讀一些與>>流提取運算符:ifs >> number

  2. 標準庫函數getline將從文件讀取一行,如果需要全行文本。

  3. 要檢查文件是否打開,只需寫入if (ifs)if (!ifs)。退出== NULL

  4. 您不需要在最後顯式關閉文件。當ifs變量超出範圍時,這將自動發生。

修改後的代碼:

if (!ifs) { 
    // Unable to open file. 
} else if (ifs >> number) { 
    // Read the number. 
} else { 
    // Failed to read number. 
} 
+0

..我將如何處理空白? – Hristo 2010-07-25 02:20:43

+0

默認情況下,操作員的白色空間被丟棄>> – 2010-07-25 05:18:39

1

對於你在這裏做什麼,簡單地說:

ifs >> number; 

將提取的流數,並將其存儲在 '數字'。

循環取決於內容。如果是全部數字,例如:

int x = 0; 
while (ifs >> numbers[x] && x < MAX_NUMBERS) 
{ 
ifs >> number[x]; 
x++; 
} 

將工作將一系列數字存儲在數組中。這是有效的,因爲如果提取成功,提取操作員的副作用爲真;如果失敗(由於文件或磁盤錯誤結束等),則提取操作員的副作用爲假。

+0

(如果有人在前兩分鐘看到這個,我在第一遍中忽略了實際提取) – Iain 2010-07-25 02:12:04

+2

Heheh,下一次只是忍者編輯它並且什麼都不說。這是堆棧溢出方式。 – 2010-07-25 02:13:17

+0

@John ...hahaha:D – Hristo 2010-07-25 02:14:51