C++文件IO

2023-10-28 09:36:57 浏览数 (2)

我们在windows平台上进行开发,我们需要的只是将程序和文件相连的途径让城西读取文件内容的途径以及让程序创建和写入文件的途径,因此,我将继续学习文件IO,之前我们在C 语言也学习过类似的文件操作。 C IO类处理文件的输入和输出和处理标准输入和输出的方式非常类似。要写入文件需要创建一个ofstream对象 并使用ostream方法 要读取一个文件 需要创建一个ifstream对象,并使用istream方法 与标准输入输出相比 文件的管理要更为复杂。 文件的类型分为文本文件和二进制文件,文本文件又称为ASCII文件,它的每个字节存放一个ASCII码,代表一个字符。二进制文件则是把内存中的数据,按照其在内存中的存储形式原样写在磁盘上存放。比如一个 short 类型的整数20000,在内存中占用2个字节,而按文本形式输出则占5个字节。因此在以文本形式输出时,一个字节对应一个字符,因而便于字符的输出,缺点则是占用存储空间较多。用二进制形式输出数据,节省了转化时间和存储空间,但不能直接以字符的形式输出。所以,大家可以根据自己的需要选择使用文本文件还是二进制文件存储。如果是输出log文件之类的,那肯定就得用文本形式了

简单的文件IO

首先应该包含fstream头文件 然后声明一个fstream对象 fstream fout接下来就需要将这个文件和特定的文件关联起来 可以使用open关联也可以使用构造函数关联 然后使用cout方式使用fout 例如我们要在文件中输出“Hello cvpotato”这个字符串 可以这样

代码语言:javascript复制
fstream fout("Hello.txt");
fout<<"Hello cvpotato";

由于ostream是oftream类的基类,因此可以使用所有ostream的方法,包括各种插入运算符定义 格式化方法和控制符。ofstream类使用被缓冲的输出 因此程序在创建像fout这样的ofstream对象时,将为输出缓冲分配空间。。。好吧确实这种表达很难理解,不得不吐槽一下这本书。。。 先了解一下我们用到的类库

代码语言:javascript复制
fstream(输入输出文件流):支持文件的输入与输出操作;

ifstream(输入文件流):支持从文件中输入操作; ofstream(输出文件流):支持向文件写入的操作; 实际上这几个类都是C 标准模板库STL中提供给我们的,现成的,写好的文件流操作类,我们可以直接拿过来用!之前说过本身C 兼容C语言,所以C语言中的文件读写函数仍然支持,比如:fopen、fread、fwrite、fclose 等等。不过C 中的这几个文件流操作类更符合C 的操作习惯,使用起来更为方便,所以,更建议大家使用C 中的文件操作类。 再回到我们前面的操作中去可以使用open或者构造函数初始化建立文件链接 实际上open不止有一个参数 第二个参数就是选择打开的方式 我们之所以调用open不用给定参数是因为每个对象都有打开文件的方式 ifstream是ios::in 而oftream是ios::cout fstream是ios::in|ios::out 与C语言一样,是可以通过|符号进行组合使用的 常用参数如下:

代码语言:javascript复制
ios::in  
为输入(读)而打开文件  
ios::out  
为输出(写)而打开文件  
ios::ate  
初始位置:文件尾  
ios::app  
所有输出附加在文件末尾  
ios::trunc  
如果文件已存在则先删除该文件  
ios::binary  
二进制方式

可以通过判断输出流文件对象和类方法is_open来判断文件是否打开成功以及使用 fs.close() 关闭文件流。也就是是文件流对象 fs 跟磁盘文件断开连接。

0 人点赞