这个简单的程序,无法使用ifstream读取数据。读取总是一个空字符串。STD Filestream损坏? (内部文件缓冲区空,无法读取输入)
#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)
file.getline
使用迭代器
使用>>运算
不允许有例外抛出(即使使用ios :: failbit和ios :: badbit设置)
文件是好的
file.is_open()是真实的,file.good()是真的
当我检查调试文件流对象(构造函数调用后),它似乎已损坏(全缓冲区为空,指针中有一堆空值,唯一有效的数据是对文件本身的引用)。
我已经编制了Win32和x64和我得到相同的结果。
我修复了我为VS 2012分发的C++安装,它也是同样的问题。
我不知道该怎么做。我从来没有见过这样的问题。我开始怀疑其他std对象是否也像这样被破坏了。或者,也许这是C文件流在某种形状中被损坏。
编辑***我已经删除了参数,但是无论读取什么数据都不是来自我的文件的内容。
为什么你将随机参数传递给'ifstream'构造函数?你从哪里得到这些东西? [手册](http://en.cppreference.com/w/cpp/io/basic_ifstream/basic_ifstream)告诉你关于它们的是什么? –
你指的是哪个随机参数?我正在传递路径和标志以供使用。 – Igneous01
@ Igneous01'std :: ios :: failbit | std :: ios :: badbit'参数。 – 2016-12-03 03:24:56