C ++读取整个文本文件

时间:2013-03-21 12:32:57

标签: c++ visual-c++ text-files

我尝试使用带有此代码的vc ++读取整个文本文件

ifstream file (filePath, ios::in|ios::binary|ios::ate);
    if (file.is_open())
    {
        size = (long)file.tellg();
        char *contents = new char [size];
        file.seekg (0, ios::beg);
        file.read (contents, size);
        file.close();
        isInCharString("eat",contents);

        delete [] contents;
    }

但是它不能获取所有整个文件,为什么以及如何处理这个?

注意:文件大小为1.87 MB和39854行

4 个答案:

答案 0 :(得分:2)

您缺少以下一行

file.seekg (0, file.end);

之前:

size = file.tellg();
file.seekg (0, file.beg);

如本例所示:http://www.cplusplus.com/reference/istream/istream/read/

答案 1 :(得分:2)

另一种方法是:

std::string s;
{
    std::ifstream file ("example.bin", std::ios::binary);
    if (file) {
        std::ostringstream os;
        os << file.rdbuf();
        s = os.str();
    }
    else {
        // error
    }
}

或者,您可以使用C库函数fopen,fseek,ftell,fread,fclose。在某些情况下,c-api可以更快,但代价是更多的STL接口。

答案 2 :(得分:0)

你真的应该养成阅读文档的习惯。记录ifstream::read有时不会读取所有字节,

   The number of characters successfully read and stored by this function 
   can be accessed by calling member gcount.

因此,您可以通过查看file.gcount()file.rdstate()来调试问题。此外,对于此类大型读取,使用(在某些显式循环中)istream::readsome成员函数可能更相关。 (我建议用例如64K字节的块来阅读。

PS可能是某些实现或系统特定问题。

答案 3 :(得分:0)

谢谢大家,我发现错误在哪里, 只需下面的代码读取整个文件, 问题出在VS观察者本身,它只是显示一定数量的数据而不是全文文件。