C++的fstream如何检查一个文件是否成功打开?
比如ofstreamf;f.open("123.txt");此时如果123.txt不存在,则编译器自动创建一个123.txt的空文件,用if(!f)cout<<"Erro...
比如
ofstream f;
f.open("123.txt");
此时如果123.txt不存在,则编译器自动创建一个123.txt的空文件,用
if (!f)
cout<<"Error";
是检测不出来的,而新的标准库也不支持ios::nocreate了
应该如何检查该文件是否成功打开呢? 展开
ofstream f;
f.open("123.txt");
此时如果123.txt不存在,则编译器自动创建一个123.txt的空文件,用
if (!f)
cout<<"Error";
是检测不出来的,而新的标准库也不支持ios::nocreate了
应该如何检查该文件是否成功打开呢? 展开
7个回答
展开全部
测试文件打开是否成功:如果文件打开有错误,比如读取一个不存在的文件,当然对于写入文件来说不会出错,因为写入一个不存在的文件时会创建该文件。测试文件打开是否成功可以直接对流进行测试,因为文件打开失败时会把ios::failbit位设为1,所以也可以调用流中的fail()函数来检测文件打开是否成功。比如可以这样测试文件ifstream hy(“hhh.txt”); 直接对流进行测试比如while(hy){}表示文件打开成功则执行循环,或者测试fail函数比如while(hy.fail());表示打开失败则执行循环,当读取文件到达文件尾时程序会把ios::eofbit位设为1。
现行的检测方法is_open()函数,如果文件打开成功则反回true否则反回flash,is_open函数是成员函数,使用时需要使用流类的对象来调用。对于过去一般使用常规的good(),fail()函数来检查文件是否打开成功,而现在新式的is_open()函数同样能实现上述这些函数的功能,而且还能提供这些函数无法实现的功能,比如以一个不合适的文件模式打开文件失败时,这时只有good()和is_open()能检测到这种错误。
现行的检测方法is_open()函数,如果文件打开成功则反回true否则反回flash,is_open函数是成员函数,使用时需要使用流类的对象来调用。对于过去一般使用常规的good(),fail()函数来检查文件是否打开成功,而现在新式的is_open()函数同样能实现上述这些函数的功能,而且还能提供这些函数无法实现的功能,比如以一个不合适的文件模式打开文件失败时,这时只有good()和is_open()能检测到这种错误。
展开全部
用fstream打开文件后,可以用两种方法判断是否成功:
1 直接使用对象判断。
如打开后的fstream对象为fs,那么
if(!fs)cout << "open failed\n";
即,逻辑非!运算重载,可以用来判断打开是否成功。
2 使用成员函数is_open。
这是一个专门判断是否打开成功的成员函数。
if(fs.is_open()) cout << "open success\n";
1 直接使用对象判断。
如打开后的fstream对象为fs,那么
if(!fs)cout << "open failed\n";
即,逻辑非!运算重载,可以用来判断打开是否成功。
2 使用成员函数is_open。
这是一个专门判断是否打开成功的成员函数。
if(fs.is_open()) cout << "open success\n";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
换个方法试试吧:
先测试是否能北作为可读文件打开:
ifstream fin("123.txt")
if(!fin) cout<<"Error!"<<endl;
else { fin.close(); ofstream fout("123.txt"); }
语言是一门灵活的学科,不要总想着有没有现成的方法去达到你想要的效果,可以试着用你已掌握的知识去解决问题.希望对你有帮助~~~
先测试是否能北作为可读文件打开:
ifstream fin("123.txt")
if(!fin) cout<<"Error!"<<endl;
else { fin.close(); ofstream fout("123.txt"); }
语言是一门灵活的学科,不要总想着有没有现成的方法去达到你想要的效果,可以试着用你已掌握的知识去解决问题.希望对你有帮助~~~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LZ 的的意思是不是测试一个已经存在的文件是否打成功呢
如果是这样,就用 ifstream 绑定该文件作测试就好了,在文件不存在的时候,它的 failbit 位设置为 1,代码如下:
#include<ifstream>
// 先测试文件是否存在
std::iftream testfile("c:\\123.txt");
if(!testfile)
{
std::cerr << "Error!" << endl;
return -1;
}
// 通过测试,则打开文件
testfile.close();
testfile.clear();
std::ofstream f("c:\\123.txt")
用 ofstream 绑定文件,文件不存在会自动创建而不会设置出错状态。
或者将文件绑定到 fstream 对象,并检查对象,fstream 对象默认设置 trunc 标记,可以在创建时添加 app 标记,从而使你的写入不覆盖已有内容。
代码如:
#include<fstream>
std::fstream f("c::\\123.txt", std::fstream::app);
if(!f){std::cerr << "Error!" << endl;}
如果是这样,就用 ifstream 绑定该文件作测试就好了,在文件不存在的时候,它的 failbit 位设置为 1,代码如下:
#include<ifstream>
// 先测试文件是否存在
std::iftream testfile("c:\\123.txt");
if(!testfile)
{
std::cerr << "Error!" << endl;
return -1;
}
// 通过测试,则打开文件
testfile.close();
testfile.clear();
std::ofstream f("c:\\123.txt")
用 ofstream 绑定文件,文件不存在会自动创建而不会设置出错状态。
或者将文件绑定到 fstream 对象,并检查对象,fstream 对象默认设置 trunc 标记,可以在创建时添加 app 标记,从而使你的写入不覆盖已有内容。
代码如:
#include<fstream>
std::fstream f("c::\\123.txt", std::fstream::app);
if(!f){std::cerr << "Error!" << endl;}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、可以测试是否能作为可读文件打开,例如:
ifstream fin("123.txt")
if(!fin) cout<<"Error!"<<endl;
else { fin.close(); ofstream fout("123.txt"); }
2、例程:
#include <iostream>
#include <fstream>
using namespace std;
#define FILENAME "D:\\aaa.txt"
int main()
{
fstream file;
file.open(FILENAME,ios::in);
if(!file)
{
cout<<FILENAME<<"没有被创建";
}
else
{
cout<<FILENAME<<"已经存在";
}
return 0;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询