《实用C++》第43课 文件IO操作之打开与关闭

本文转载自:VC驿站

https://www.cctry.com/thread-290068-1-1.html

1、什么是文件的IO操作?
C++的文件操作就是指对文件进行读写的操作,那么 IO 呢?字母 I 就是 Input 的缩写,意为输入,字母 O 就是 Output 的缩写,意为输出。所以文件的 IO 操作就是指文件的输入与输出。输入就是从磁盘上的文件中读取内容到内存中。输出就是将内存中的数据内容输出或者说写入到磁盘的文件中。这么解释大家应该明白了吧?

2、文件的类型:
文件的类型分为文本文件和二进制文件,文本文件又称为ASCII文件,它的每个字节存放一个ASCII码,代表一个字符。二进制文件则是把内存中的数据,按照其在内存中的存储形式原样写在磁盘上存放。比如一个 short 类型的整数20000,在内存中占用2个字节,而按文本形式输出则占5个字节。因此在以文本形式输出时,一个字节对应一个字符,因而便于字符的输出,缺点则是占用存储空间较多。用二进制形式输出数据,节省了转化时间和存储空间,但不能直接以字符的形式输出。所以,大家可以根据自己的需要选择使用文本文件还是二进制文件存储。如果是输出log文件之类的,那肯定就得用文本形式了,二进制的也看不懂啊,对不对?

代码举例:

#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
    short var = 20000;
    ofstream fs;
    fs.open("d:\\123.txt");
    fs << var;
    fs.close();

    ofstream fs2;
    fs2.open("d:\\456.txt");
    fs2.write((const char*)&var, sizeof(short));
    fs2.close();

    short value = 0;
    ifstream fi;
    fi.open("d:\\456.txt");
    fi.read((char*)&value, sizeof(short));
    return 0;
}


3、C++中的文件操作类:
fstream(输入输出文件流):支持文件的输入与输出操作;
ifstream(输入文件流):支持从文件中输入操作;
ofstream(输出文件流):支持向文件写入的操作;
实际上这几个类都是C++标准模板库STL中提供给我们的,现成的,写好的文件流操作类,我们可以直接拿过来用!之前说过本身C++兼容C语言,所以C语言中的文件读写函数仍然支持,比如:fopen、fread、fwrite、fclose 等等。不过C++中的这几个文件流操作类更符合C++的操作习惯,使用起来更为方便,所以,更建议大家使用C++中的文件操作类。

4、文件的打开操作:构造函数与open函数

ofstream fs("z:\\123.txt");
fs.open("z:\\123.txt");

这两种操作都是可以的。当前我们这里只使用了第1个参数,即:传入了文件的路径。实际上open函数有多个参数,第2个参数也很常用,表示打开文件的方式,取值有如下:
ios::in
为输入(读)而打开文件
ios::out
为输出(写)而打开文件
ios::ate
初始位置:文件尾
ios::app
所有输出附加在文件末尾
ios::trunc
如果文件已存在则先删除该文件
ios::binary
二进制方式
这些方式是能够进行组合使用的,以“或”运算(“|”)的方式:例如:

ofstream fs;  
fs.open("123.txt", ios::in|ios::out|ios::binary);

有的会员马上就会有疑问了,在第2个知识点的时候,我们并没有很明确的使用open函数的第2个参数,可以说是省略了,或者说使用了默认的第2个参数,为什么也好用呢?
实际上:ofstream、ifstream、fstream 的open函数或者构造函数都有默认的打开文件的方式,如果不传第2个参数,那么就用默认的,其值如下:

ofstream fs1("123.txt", ios::out);
ifstream fs2("123.txt", ios::in);
fstream fs3("123.txt", ios::in|ios::out);

这回大家明白了吧?

5、文件是否成功打开了呢?
既然文件打开了,但是文件是否打开成功了呢?我们又该如何判断呢?有的会员会说,看看open函数的返回值,返回 false 肯定就表明打开失败了吧?但是open函数的返回值是 void 类型哦,也就是说无返回值,你又该如何判断呢?方法有多种,这里面一一列举给大家,大家喜欢用哪种方式就用哪种:
①、直接 if 判断 fs 对象;
②、用 is_open 方法判断;
③、用 good 方法判断;
④、用 fail 方法判断;
比较常用的还是前两种方法,意思表达明确。建议大家用前两种方法检测文件是否打开成功。具体使用见视频教程讲解!

6、文件流的关闭:
使用 fs.close() 关闭文件流。也就是是文件流对象 fs 跟磁盘文件断开连接。

7、小作业:
咱们课堂上主要是使用 ifstream 和 ofstream 对象来进行文件的操作,大家课后请使用 fstream 文件流来对文件进行读写操作,把课堂上讲解的知识点实现一遍。

第43课视频教程下载地址:

https://www.cctry.com/thread-290068-1-1.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值