[英]Reading File in C++
我無法弄清楚為什么我的代碼無法打開和讀取文件。 我錯過了什么?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main (int argc, char * const argv[])
{
string line;
ifstream myfile ("input_file_1.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
getline (myfile,line);
cout << line << endl;
}
}
else
{
cout << "Was unable to open the file" << endl;
}
return 0;
}
文件“input_file_1.txt”與我的.cpp文件在同一目錄中,並且具有讀取權限。 我甚至給了它777權限,我無法閱讀它。
誰能告訴我我做錯了什么? 我真的想不出來......
你如何以及在哪里執行你的計划? 從IDE? 您可以從具有文本文件的同一目錄運行該程序。 另一種可能性是使用文件的絕對路徑。
如果未指定路徑,庫將嘗試從當前目錄加載文件。 您需要確保這是文件所在的位置。
此外,如果文件由另一個程序以獨占方式打開,您可能無法打開該文件。 確保它在其他程序(例如編輯器)中仍未打開。
明確測試EOF通常是錯誤的。
最后一次有效讀取(此處為getline())讀取最多但沒有超過EOF。 然后打印該行。 然后重啟循環。 eof()的這些測試不會失敗(因為它沒有讀過EOF)。 然后進入循環體並嘗試讀取下一行(使用getline()),這會失敗,因為剩下0個字節要讀取(因此將line的值保留為未定義狀態)。 然后打印出行(未定義的值)和換行符。
while (!myfile.eof())
{
getline (myfile,line);
cout << line << endl;
}
讀取文件的循環的正確版本是:
while (getline (myfile,line))
{
cout << line << endl;
}
這是有效的,因為getline()返回對流的引用。 布爾上下文中使用的流(如while條件)測試流是否處於錯誤狀態(即測試EOF和其他不良情況)並返回可在上下文中使用correctyl的對象。 如果流的狀態為OK,則表示已成功讀取並輸入循環(因此允許您打印該行)。
從您的代碼(包括您的cpp)創建的二進制文件在與您的代碼不同的地方執行,可能是“bin”文件夾。 您可以將文件放入與可執行文件相同的文件夾中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.