簡體   English   中英

用C ++讀取文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM