C++ primer plus 第17 章 输入、输出和文件:文件输入和输出02:流状态检查和is_open():打开多个文件:命令行处理技术

C++ primer plus 第17 章 输入、输出和文件:文件输入和输出01

17.4.2 流状态检查和is_open()

17.4.3 打开多个文件

17.4.4命令行处理技术

程序清单17.17 count.cpp


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


17.4.2 流状态检查和is open()

C++文件流类从iosbase 类那里继承了一个流状态成员。正如前面指出的,该成员存储了指出流状态的信息:一切顺利、已到达文件尾、I/0 操作失败等。如果一切顺利,则流状态为零(没有消息就是好消息)。其他状态都是通过将特定位设置为1来记录的。文件流类还继承了iosbase 类中报告流状态的方法,表17.4对这些方法进行了总结。可以通过检查流状态来判断最后一个流操作是否成功。对于文件流,这包括检查试图打开文件时是否成功。例如,试图打开一个不存在的文件进行输入时,将设置ilbit位,因此可以这样进行检查:

fin.open(argv[file]):
if (fin.fail())// open attempt failed
{
   
...
}

由于 ifstrcam 对象和 istrcam 对象一样,被放在需要 bool类型的地方时,将被转换为 bool值,因此您也可以这样做:

fin.open(argvlfile]);
if (!fin)//open attempt failed
{
   
...
}


然而,较新的C++实现提供了一种更好的检查文件是否被打开的方法–is_open()方法:

if(!fin.is open())//open attempt failed
{
   
...
}

这种方式之所以更好,是因为它能够检测出其他方式不能检测出的微妙问题,接下来的“警告”将讨论这一点。
警告:以前,检查文件是否成功打开的常见方式如下:

### C++ Primer Plus17 内容概述 #### 文件输入输出操作 C++文件处理主要依赖于`<fstream>`库中的三个类:`ifstream`, `ofstream` `fstream`。这些类分别用于读取文件、写入文件以及同时进行读写操作[^2]。 对于文件的状态管理,C++提供了多种方法来检测文件的操作情况。特别是当涉及到文件是否成功打开时,可以通过调用成员函数`is_open()`来进行判断。如果返回值为真,则表示该文件已被正确打开;反之则未成功打开。 #### 实际应用案例展示 下面是一个简单的程序实例,展示了如何利用命令行参数指定要创建并写入数据的目标文件: ```cpp #include <iostream> #include <fstream> using namespace std; int main(int argc, char* argv[]) { // 假设不会出现错误地尝试打开文件 ofstream out(argv[1]); cout << "请输入一串字符串:"; int ch; while ((ch = cin.get()) != EOF) out << static_cast<char>(ch); out.close(); return 0; } ``` 此代码片段实现了从标准输入接收字符直到遇到EOF(通常是Ctrl+D),并将接收到的数据逐字节复制到由命令行参数指定的文件中去[^4]。 #### 关联知识点补充说明 除了基本的文件I/O功能外,在实际开发过程中还经常需要用到动态内存分配技术。例如,在定义某些复杂结构体或对象时可能会涉及指针的应用场景。这里给出了一段关于名为`Cpmv`的自定义类型的描述,它内部维护着指向另一个结构体`Info`的对象指针,并重载了一些运算符以便更好地支持赋值语义加法组合逻辑[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值