[英]Reading a stream in C++
我有以下代碼:
ifstream initFile;
initFile.open("D:\\InitTLM.csv");
if(initFile.is_open())
{
// Process file
}
該文件未打開。 該文件確實存在於D:驅動器上。 有沒有辦法找出無法找到此文件的原因? 就像一個“錯誤”?
這里回答我相信: 獲取std :: fstream失敗錯誤消息和/或異常
您應該能夠使用操作系統的底層錯誤報告機制來獲取原因(因為標准庫是基於OS原語構建的)。 代碼不是可移植的,但它可以幫助您解決問題的根源。
由於您似乎使用的是Windows,因此您將使用GetLastError來獲取原始代碼,並使用FormatMessage將其轉換為文本描述。
STL不善於報告錯誤。 這是您在標准范圍內可以做的最好的事情:
ifstream initFile; initFile.exceptions(ifstream::eofbit|ifstream::failbit|ifstream::badbit); try { initFile.open("D:\\InitTLM.csv"); // Process File } catch(ifstream::failure e) { cout << "Exception opening file:" << e.what() << endl; }
根據我的經驗,what()返回的消息通常是無用的。
檢查D:驅動器根目錄的權限。 您可能會發現已編譯的可執行文件或運行調試程序的服務沒有足夠的訪問權限來打開該文件。
嘗試暫時將D:\\ root目錄上的權限更改為“Everyone - > Full Control”,並查看是否可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.