正在检查是否使用ifstream成功打开了文件
Checking if a file opened successfully with ifstream
我有以下内容将打开一个文件进行读取。但是,我想检查以确保文件已成功打开,所以我使用fail来查看是否已设置标志。然而,我不断得到以下错误:
我是C++的新手,因为我来自C。所以我不确定我是否理解这个错误:
无法调用成员函数'bool std::basic_ios<_图表_特征>::fail()const[with_CharT=char,_Traits=std::char_Traits]'不带对象
代码:
int devices::open_file(std::string _file_name)
{
ifstream input_stream;
input_stream.open(_file_name.c_str(), ios::in);
if(ios::fail() == true) {
return -1;
}
file_name = _file_name;
return 0;
}
您可以简单地执行以下操作:
int devices::open_file(std::string _file_name)
{
ifstream input_stream;
input_stream.open(_file_name.c_str(), ios::in);
if(!input_stream)
{
return -1;
}
file_name = _file_name;
return 0;
}
fail()不是一个静态方法,您必须在实例而不是类型上调用它,所以如果您想使用fail(,请在上面的代码中将!input_stream
替换为input_stream.fail()
。
我真的很想知道你在这里想要实现什么。您正在打开文件,然后立即再次关闭它。你只是想检查文件是否存在吗?
您也可以使用std::ifstream::is_open
。如果文件已打开并与此流对象关联,则返回true。
// ifstream::is_open
#include <iostream> // std::cout
#include <fstream> // std::ifstream
int main () {
std::ifstream ifs ("test.txt");
if (ifs.is_open()) {
// print file:
char c = ifs.get();
while (ifs.good()) {
std::cout << c;
c = ifs.get();
}
}
else {
// show message:
std::cout << "Error opening file";
}
return 0;
}
http://www.cplusplus.com/reference/fstream/ifstream/is_open/
您的错误是因为您使用ios::fail()
作为静态方法,而它实际上是一个成员方法。
if (input_stream.fail())
{
...
}
您必须对流对象调用fail()。更惯用的方法是:
input_stream.open(_file_name.c_str(), ios::in);
if( ! input_stream ) {
return -1;
}
相关文章:
- 如何在 c++ 中导入文件?以及如何成功编译它们?
- 如何检查文件复制和写入是否成功
- 如何检查文件是否复制成功?(便携式解决方案)C++
- 成功的生成文件失败,在 CLion 中出现"identical" CMake
- 复制文件成功,移动文件失败,参数相同 - C++
- 无法通过 bazel 的规则成功包含外部头文件cc_library
- 文件创建并不总是成功
- 如何允许我的程序成功读取数字包含的文件
- 成功使用CMakeLists制作后如何修复"open: No such file or directory"错误(该文件实际上存在)
- 设置文件属性成功,但检索其失败
- 为什么这个文件不成功读取
- ShellExecute 返回成功,但不执行文件
- 写入.ini文件 - SimpleIni SetValue 尽管看起来成功了,但什么也没做
- G++ 和 CL(VS2017) 都编译成功,但 cl 编译的可执行文件运行异常
- 为什么在 32 位 armv7l 上 mmap 一个 4GB 文件成功
- 无法成功生成文件和控制台的std::set输出
- MATLAB MEX 成功完成,但未创建 .mexw64 文件
- QPixmap::save() 返回成功,但不生成任何文件
- 成功执行 boost::文件系统::last_write_time 需要哪些权限
- Visual Studio Team Services编译成功,但没有EXE文件