gpt4 book ai didi

c++ - STD 文件流损坏? (内部文件缓冲区为空,无法读取输入)

转载 作者:行者123 更新时间:2023-11-28 01:56:41 26 4
gpt4 key购买 nike

这个简单的程序,不能使用 ifstream 读取数据。读取始终为空字符串。

#include <fstream>
#include <string>
#include <iostream>

std::string getFileString(const std::string& path)
{
std::ifstream file(path);
if (!file)
throw std::exception("Cannot Open File");
if (!file.is_open() && !file.good())
throw std::exception("Cannot Open File");
std::string t;
file >> t;
std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());

return content;
}

int main()
{
std::string t = getFileString("C:\\Users\\user\\Documents\\folder\\t1.txt");
return 0;
}

我已经尝试调试了几个小时,但没有办法修复它。我在新项目中尝试过做完全相同的事情,但 ifstream 没有读取任何内容。

我确认:

  • 文件中有数据

  • 路径正确

  • 我正在调试下编译,使用调试库

我试过:

  • std::getline(文件, t)

  • 文件.getline

  • 使用迭代器

  • 使用 >> 运算符

没有异常被抛出(即使设置了 ios::failbit 和 ios::badbit)

文件很好

file.is_open() 为真且 file.good() 为真

当我在调试器中检查文件流对象时(构造函数调用后)它似乎已损坏(整个缓冲区为空,指针中有一堆空值,唯一有效的数据是对文件本身的引用)。

ifstream in debug

我针对 win32 和 x64 进行了编译,得到了相同的结果。

我修复了 VS 2012 的 C++ 可分发安装,这是同样的问题。

我现在不知道该怎么办。我以前从未见过这样的问题。我开始怀疑其他 std 对象是否也像这个一样损坏。或者可能是 C 文件流以某种形式损坏了。

编辑*** 我已经删除了参数,但是正在读取的任何数据都不是我文件中的数据。

enter image description here

最佳答案

std::ifstream file(path, std::ios::in | std::ios::failbit | std::ios::badbit);

您创建的文件对象在构建后立即被标记为处于失败状态。

现在,如果这不是您想要的,请去掉 failbitbadbit。事实上,完全摆脱整个参数,因为 ifstream 的构造函数的第二个参数无论如何默认为 ios::in

关于c++ - STD 文件流损坏? (内部文件缓冲区为空,无法读取输入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com