fstream 中判斷是否成功打開文件


from: http://blog.csdn.NET/zhtsuc/article/details/2938614

 

關於C++ fstream的一個容易使用出錯的地方

 

關於c++ 中 文件流的兩個類,ifstream 和ofstream,大家也許並不陌生。

其負責c++的文件輸入流 和 文件輸出流。基本上所以語言都會提供類似的文件輸入流 和文件輸出流類。

 

但當大家學習了Java,或者c#后,大家就很容易用錯這個類,把三種語言混淆。

在java 和 c#中,關於打開輸入文件流,或者輸出流,都是通過拋出異常來標志打開失敗。

而且大家對這種思想也很容易接受。

 

所以在c++中如下的錯誤使用很是常見。

  1. try
  2. {
  3.   ifstream fin("filename");
  4.   //TODO:
  5. }
  6. catch(exception)
  7. {
  8.   cout << "fail to open file" << endl;
  9. }

其實c++的ifstream,ofstream和c#,java的文件流類在這一點上並不相同。

當文件打開失敗或者其他錯誤時,並沒有異常拋出。那讀者就會想,“如何判斷文件打開成功呢”。

因為肯定要確定文件打開成功,才能操作文件流對象。

如下為一般的正確使用方法。

 

  1. ifstream fin("filename");
  2. if (!fin)
  3. {
  4.   cout << "fail to open the file" <<endl;
  5.   return -1;//或者拋出異常。
  6. }
  7. else
  8. {
  9.   cout << "open the file successfully" << endl;
  10. }

這時候有人又有疑問了。fin是一個ifstream對象,不可能是0,或者NULL啊。怎么會有!fin的這個判斷語句成功呢。

正如我們所以疑問的,!fin並不是說判斷fin是否為0或者為空。而是ifstream類重載了!操作符,所以當我們如此使用的時候,是!操作符函數返回一個bool變量來標記是否成功。

 

類似的對於ofstream也是如此。

 

其實在c++中,很多類都是通過重載操作符來完成一些轉化的。讀者可以常常留意。

 

other: http://blog.csdn.net/seadplus/article/details/7802346


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM