97

我在一个介绍文件的教程中(如何从文件中读取和写入文件)

首先,这不是作业,这只是我正在寻求的一般帮助。

我知道如何一次阅读一个单词,但我不知道如何一次阅读一行,或者如何阅读整个文本文件。

如果我的文件包含 1000 个单词怎么办?逐字阅读整个文件是不切实际的。

我的名为“Read”的文本文件包含以下内容:

I love to play games
I love reading
I have 2 books

这是我到目前为止所取得的成就:

#include <iostream>
#include <fstream>

using namespace std;
int main (){
   
  ifstream inFile;
  inFile.open("Read.txt");

  inFile >>

有没有办法一次读取整个文件,而不是分别读取每一行或每个单词?

4

9 回答 9

179

您可以使用std::getline

#include <fstream>
#include <string>

int main() 
{ 
    std::ifstream file("Read.txt");
    std::string str; 
    while (std::getline(file, str))
    {
        // Process str
    }
}

另请注意,最好只在其构造函数中使用文件名构造文件流,而不是显式打开(关闭也是如此,让析构函数完成工作)。

更多文档std::string::getline()可以在CPP Reference阅读。

读取整个文本文件的最简单方法可能就是连接那些检索到的行。

std::ifstream file("Read.txt");
std::string str;
std::string file_contents;
while (std::getline(file, str))
{
  file_contents += str;
  file_contents.push_back('\n');
}  
于 2012-10-23T17:09:51.990 回答
22

我知道这是一个非常古老的线程,但我还想指出另一种实际上非常简单的方法......这是一些示例代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {

    ifstream file("filename.txt");
    string content;

    while(file >> content) {
        cout << content << ' ';
    }
    return 0;
}
于 2013-10-29T01:04:06.483 回答
5

好吧,要做到这一点,也可以使用 C++ 中提供的 freopen 函数 - http://www.cplusplus.com/reference/cstdio/freopen/并逐行读取文件如下 - :

#include<cstdio>
#include<iostream>

using namespace std;

int main(){
   freopen("path to file", "rb", stdin);
   string line;
   while(getline(cin, line))
       cout << line << endl;
   return 0;
}
于 2015-04-30T19:31:47.027 回答
5

我认为您可以使用 istream .read() 函数。您可以以合理的块大小循环并直接读取内存缓冲区,然后将其附加到某种任意内存容器(例如 std::vector)。我可以写一个例子,但我怀疑你想要一个完整的解决方案;如果您需要任何其他信息,请告诉我。

于 2012-10-23T17:37:54.200 回答
1

另一种尚未提及的方法是std::vector.

std::vector<std::string> line;

while(file >> mystr)
{
   line.push_back(mystr);
}

然后你可以简单地遍历向量并修改/提取你需要的/

于 2012-10-23T17:40:37.470 回答
1

上面的解决方案都很棒,但是“一次读取文件”还有一个更好的解决方案:

fstream f(filename);
stringstream iss;
iss << f.rdbuf();
string entireFile = iss.str();
于 2021-06-18T08:25:20.647 回答
0

下面的代码片段将帮助您读取由 unicode 字符组成的文件

CString plainText="";
errno_t errCode = _tfopen_s(&fStream, FileLoc, _T("r, ccs=UNICODE"));
    if (0 == errCode)
    {
        CStdioFile File(fStream);
        CString Line;
        while (File.ReadString(Line))
        {
            plainText += Line;
        }
    }
    fflush(fStream);
    fclose(fStream);

读完后应始终关闭文件指针,否则会导致错误

于 2021-06-18T08:57:56.883 回答
0

您也可以使用它来一一读取文件中的所有行,然后打印 i

#include <iostream>
#include <fstream>

using namespace std;



bool check_file_is_empty ( ifstream& file){
    return file.peek() == EOF ;
}

int main (){


    string text[256];
    int lineno ;
    ifstream file("text.txt");
    int num = 0;

    while (!check_file_is_empty(file))
    {    
        getline(file , text[num]);
        num++;
    }
    for (int i = 0; i < num ; i++)
    {
        cout << "\nthis is the text in " <<  "line " << i+1 << " :: " << text[i] << endl ;


    }
    
    system("pause");

    return 0;
}

希望这可以帮助你:)

于 2020-11-01T00:53:36.740 回答
0

你好兄弟这是一种使用此代码在确切行中读取字符串的方法

希望这可以帮助你!

#include <iostream>
#include <fstream>

using namespace std;


int main (){


    string text[1];
    int lineno ;
    ifstream file("text.txt");
    cout << "tell me which line of the file you want : " ;
    cin >> lineno ; 



    for (int i = 0; i < lineno ; i++)
    {
        
        getline(file , text[0]);

    }   

    cout << "\nthis is the text in which line you want befor  :: " << text[0] << endl ;
    system("pause");

    return 0;
}

祝你好运 !

于 2020-11-01T00:33:43.423 回答