【旧资料整理】C++ 关于读入文件出错

资料时间:2009-12-02之前

分享时间:2009-12-02到百度空间,空间关闭,重新整理


经常从文件读入数据,如果读入失败,应该停止处理,否则会产生无法预期的错误f。文件流stream出错常见这样三种情况。
一、文件不存在:
如果用了ios::in打开方式,不创建文件,file值是0,file>>变量返回0,file.eof返回0,不产生异常。所以try{}catch(){}结构无法捕捉异常,不能用file.eof()判断失败,可以用!file判断失败,可以用if(file>>变量)判断失败。
如果用了ios::out打开方式,创建文件,file非0,所以!file不能用来失败,其它同ios::in。
二、文件空或数据格式不对:
用if(file>>变量)判断即可。
三、产生异常:当然用try{}catch(){}结构无法捕捉异常了。

例如:想读入一个整数,且很重要,一但失败必需结束,保险的写法是:

try{
    int a;
    fstream file("a.txt",ios::in);
    if(!file)
        throw a;
    if(!file>>a)
        throw a;
    file.close();
}catch(...)
{
    cout<<"error";
    return;
}


其中throw是抛出一个异常,后接一个变量即可,用来区分异常类型。catch(...)是捕捉所有异常。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C++ 中,可以使用 `fstream` 类来进行文件读写操作。`fstream` 类是一个通用的文件输入输出流类,可以用于读取和写入文本文件或二进制文件。 下面是一个简单的示例代码,演示如何使用 `fstream` 类读写文本文件: ```c++ #include <iostream> #include <fstream> #include <string> using namespace std; int main() { // 写入文件 ofstream outFile("example.txt"); if (outFile.is_open()) { outFile << "Hello, World!" << endl; outFile << "This is an example file." << endl; outFile.close(); } else { cerr << "Failed to open file." << endl; return 1; } // 读取文件 ifstream inFile("example.txt"); if (inFile.is_open()) { string line; while (getline(inFile, line)) { cout << line << endl; } inFile.close(); } else { cerr << "Failed to open file." << endl; return 1; } return 0; } ``` 在这个示例代码中,我们首先使用 `ofstream` 类创建一个文件输出流 `outFile`,然后使用 `outFile` 对象的 `<<` 运算符将数据写入文件。在写入完成后,我们使用 `outFile.close()` 函数关闭文件。 接下来,我们使用 `ifstream` 类创建一个文件输入流 `inFile`,然后使用 `inFile` 对象的 `getline()` 函数逐行读取文件中的数据,并将每行数据输出到控制台。在读取完成后,我们使用 `inFile.close()` 函数关闭文件。 需要注意的是,在使用 `fstream` 类进行文件读写时,需要确保文件被成功打开。如果文件打开失败,可以使用 `cerr` 对象输出错误信息,并使用 `return` 语句终止程序。另外,在写入文件时,需要使用 `ofstream` 类;在读取文件时,需要使用 `ifstream` 类。如果需要同时进行文件读写,可以使用 `fstream` 类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值