C++ STD文件流已损坏?(内部文件缓冲区为空,无法读取输入)
这个简单的程序,不能使用ifstream读取数据。读取总是一个空字符串C++ STD文件流已损坏?(内部文件缓冲区为空,无法读取输入),c++,c++11,visual-studio-2012,C++,C++11,Visual Studio 2012,这个简单的程序,不能使用ifstream读取数据。读取总是一个空字符串 #include <fstream> #include <string> #include <iostream> std::string getFileString(const std::string& path) { std::ifstream file(path); if (!file) throw std::exception("Cannot
#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;
}
#包括
#包括
#包括
std::string getFileString(const std::string和path)
{
std::ifstream文件(路径);
如果(!文件)
抛出std::异常(“无法打开文件”);
如果(!file.is_open()&&&!file.good())
抛出std::异常(“无法打开文件”);
std::字符串t;
文件>>t;
std::字符串内容((std::istreambuf_迭代器(文件)),std::istreambuf_迭代器();
返回内容;
}
int main()
{
std::string t=getFileString(“C:\\Users\\user\\Documents\\folder\\t1.txt”);
返回0;
}
我已经试着调试了几个小时,但没有办法修复它。我在新项目中尝试过做完全相同的事情,而ifstream没有读取任何内容
我确认:
- 文件中有数据
- 这条路是正确的
- 我正在使用调试库进行调试
- std::getline(文件,t)
- file.getline
- 使用迭代器
- 使用>>运算符
failbit
和badbit
。实际上,完全去掉整个参数,因为ifstream
的构造函数的第二个参数默认为ios::In
您创建了一个文件对象,该对象在构建后立即被标记为处于失败状态
现在,如果这不是您想要的,请删除
failbit
和badbit
。事实上,完全去掉整个参数,因为ifstream
的构造函数的第二个参数默认为ios::In
。我无法编译示例程序。以及不能用char*
参数构造exception
的引用。例如,使用运行时错误
我的建议是你测试一些错误的程序。也许您的IDE未能编译源代码,但不知何故,它丢失了源代码,并调试了一些旧版本的二进制代码。我无法编译您的示例程序。以及不能用
char*
参数构造exception
的引用。例如,使用运行时错误
我的建议是你测试一些错误的程序。可能您的IDE未能编译源代码,但不知何故错过了源代码并调试了一些旧版本的二进制代码。为什么要将随机参数传递给
ifstream
构造函数?你从哪里弄来的?关于它们你知道什么?你指的是哪些随机参数?我正在传递路径和要使用的标志。@Igneous01std::ios::failbit | std::ios::badbit
参数。我更新了帖子-很抱歉,我应该显示没有标志的原始代码。我在阅读之后添加了这些,以便控制是否从ifstream抛出异常。请使用|
而不是中的&&
!file.is_open()&&!file.good()
。对于&&
,两个条件都必须为true(即文件未打开且文件不好)才能引发异常。为什么要将随机参数传递给ifstream
构造函数?你从哪里弄来的?关于它们你知道什么?你指的是哪些随机参数?我正在传递路径和要使用的标志。@Igneous01std::ios::failbit | std::ios::badbit
参数。我更新了帖子-很抱歉,我应该显示没有标志的原始代码。我在阅读之后添加了这些,以便控制是否从ifstream抛出异常。请使用|
而不是中的&&
!file.is_open()&&!file.good()
。使用&&
,两个条件都必须为真(即文件未打开且文件不好)才能引发异常。我已更新了我的原始帖子-仍然没有乐趣。我忘了提到我先尝试了不带标志,然后又附加了标志(我在上看到一篇文章,上面提到了将这些标志添加到构造函数中,因为它们会引发异常)。我已经更新了我的原始文章-仍然没有乐趣。我忘了提到我先尝试不使用标志,然后在后面附加标志(我在上看到一篇文章,提到将这些标志添加到构造函数中,因为它们会引发异常)。有趣的是,异常当然可以将const char*作为消息的参数。您使用的编译器是什么?链接页面不同意const char*
。我的编译器是gcc 5.3.1和clang 3.8.0。我现在看到,vc++有扩展,允许const char*作为std::exception的参数。下一个想法:文件t1.txt
是否可能不包含空格(代码为32的符号)?如果是这样,那么所有的骗局
std::ifstream file(path, std::ios::in | std::ios::failbit | std::ios::badbit);