2012-02-17 50 views
0

這是我的第一個問題,我真的不知道這一點。調試後,我意識到無論將哪些內容放入outFileName並反過來文件,它總是返回true,並不會顯示錯誤消息。對不起,如果我遺漏了任何東西,這是C++我使用Visual Studio 2010讓我知道如果我需要添加任何問題。即使使用錯誤的文件名,我的fstream始終返回true。

 inFile.open(fileName.c_str(), ios::in); 
     outFile.open(outFileName.c_str(), ios::out); 
     if (inFile.good() == false && outFile.good() == false) 
     { 
      cerr << strerror(errno) << endl; 
      cerr << "Problem with the input and output file" << endl; 
      continue; 
     } 

     else if (inFile.good() == true && 
       outFile.good() == false) 
     { 
      cerr << strerror(errno) << endl; 
      cerr << "Problem with the output file"; 
      continue; 
     } 
     else if (outFile.good() == true && 
       inFile.good() == false) 
     { 
      cerr << strerror(errno) << endl; 
      cerr << "Problem with the input file" << endl; 
     } 
+0

輸出文件就是這樣 - 輸出。他們不一定存在,你可以輸入任何東西,它會工作。那裏有什麼困惑? – 2012-02-17 04:16:58

+0

請提供一個簡短,完整的程序來說明問題。不知道更多關於你的程序,任何答案都必然是一個猜測。有關如何創建簡短的完整示例程序的更多信息,請參閱http://sscce.org。 – 2012-02-17 04:22:35

+0

我認爲程序必須建立與現有文件的輸出連接,但如果有什麼可行的話,我該如何編程來報告錯誤消息? – DanielAden 2012-02-17 04:23:42

回答

2

如果要寫入現有文件,您可能需要擦除現有內容(覆蓋它),或者添加到最後。因此,合理的標誌是:

outFile.open(outFileName.c_str(), ios::in | ios::out | ios::trunc); 

outFile.open(outFileName.c_str(), ios::in | ios::out | ios::app | ios::ate); 

這將需要該文件已經存在。

之後,outFile.good()返回一個布爾值,您可以直接進行測試。不要把它比作true。畢竟,如果outFile.good() == true爲真,那麼outFile.good()肯定是真的。事實上,這個流有一個明確的轉換爲布爾值,以及用戶定義的operator!()。因此,您的錯誤檢查可能如下所示:

if (!inFile) { 
    if (!outFile) { 
     cerr << strerror(errno) << endl 
      << "Problem with the input and output file" << endl; 
    } 
    else { 
     cerr << strerror(errno) << endl 
      << "Problem with the input file"; 
    } 
} 
else if (!outFile) { 
    cerr << strerror(errno) << endl 
     << "Problem with the output file" << endl; 
} 
0

如果您有權打開寫入文件,它永遠不會失敗。

嘗試在不允許打開的位置打開文件。

+0

但即使我只輸入亂碼outFile.good()仍然返回true。 – DanielAden 2012-02-17 04:34:31

+0

這取決於胡言亂語。在確定目錄'c:\ blah'不存在後,嘗試'「c:\\ blah \\ gorg \\ foo.txt」'。或者,試試'「\」!@#$%^&<>?*():::'「'。 – 2012-02-17 05:10:43

+0

定義亂碼。具體,我們不介意讀者,我嘗試了'FooBar',它的工作原理(對我來說看起來像是胡言亂語,但對於文件系統來說很好)。 – 2012-02-17 05:20:00

相關問題