C++文件IO

文件IO

1、文件,
一般指存储在外部介质上数据的集合。一批数据是以文件的形式存放在外部介质(如:磁盘,光盘和U盘上)。操作系统是以文件为单位对数据进行处理的。若想找存在于外部介质上的数据,必须先按文件名找到指定的文件,然后再从文件中读取数据。在外部介质上存储信息,也是需要先建立一个文件,才能向他输出数据。

2、对用户来说,常用的文件有两大类,一类是程序文件,(C++的源程序文件.cpp,目标文件.obj,可执行文件.exe), 另一类是数据文件(data file)
程序运行时,常需要将一些数据(运行的最终结果和中间数据)输出到磁盘上存放起来,必要时再从磁盘输入内存。这种磁盘文件就是数据。程序中输入输出的对象就是数据文件。

3、文件中数据的组织形式可以分为 ASCII 文件和二进制文件。ASCII文件又称为文本文件(text)或 字符文件,它的每一个字节放一个ASCII代码,代表一个字符。二进制文件又称内部格式文件或字节文件,是把内存中的数据按内存中的存储形式原样输出到磁盘上存放。

4、对于字符信息,在内存中是以ASCII码形式存放的,因此,无论使用ASCII码形式输出和用二进制文件输出,其数据形式都是一样的。对数值信息就不一样。?

5、用ASCII码形式,输出的数据与字符一一对应,一个字节代表一个字符。可直接阅读,占的存储空间较多,花费转换时间(二进制形式与ASCII码)。
使用内部格式(二进制形式输出)输出数值,可节省外存空间,不需转换时间,但不可直接显示内容。

一般,程序运行中有些中间数据暂时保存在磁盘文件中,之后又需要输入到内存的,用二进制合适。为了显示内容或打印以供阅读,应选择ASCII形式输出。(低级IO -> 高级IO)

6、文件流

#include <fstream>

ofstream f1;								建立一个输出文件流对象
f1.open(磁盘文件名,输入输出方式)				open一般调用形式,文件名可为路径,缺省默认当前目录
文件的输入输出方式设置值
ios:: 设置值
in
out
app
ate
trunc
binary
ios::in | ios::out
ios::in | ios::binary
ios::out | ios::binary

输入,
输出,已有重名文件,清空
输出,添加在末尾
打开已有文件,文件指针指向末尾
打开一个文件,若文件存在,删除全部数据。不存在则建立新文件。如已制定out而为制定 app ate in,则同时默认此形式。
默认二进制打开,不指定此形式,默认ASCII码
输入加输出
二进制打开输出文件
二进制打开输入文件

打开失败时,open函数返回 0 如果是调用构造函数的形式打开文件,则流对象的值为 0

关闭磁盘文件,

f1.close();

后面的内容就没仔细看了,后面还是要看。做了模拟题库,结果后面还是考了一些细碎的点。

7、对ASCII文件操作
ASCII码文件:每一个字节都以ASCII码形式,存放数据,一个字节存放一个字符。
系统函数 exit() 参数为1,0,或任意整数,结束运行。旧版本需头文件 <stdlib.h>

8、对二进制文件操作
内存数据的映像文件,或字节文件。

istream & read(char * buffer , int len);
ostream & write( const char * buffer , int len);
buffer 字符指针指向内存中的一段存储空间,len 是读写的字节数
a.write(p1,50);
b.read(p2,30);
 一、ASCII 输出   为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取 代,所有的C++标准头文件都是无后缀的。)。这是 的一个扩展集, 提供有缓 冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个 文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O 操作。如果你猜是"fstream," 恭喜你答对了! 但这篇文章介绍的方法,我们分别使用"ifstream"?和 "ofstream" 来作输入输出。   如果你用过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。 我们现在开始讲输出部 分,首先声明一个类对象。 ofstream fout;   这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。 fout.open("output.txt");   你也可以把文件名作为构造参数来打开一个文件. ofstream fout("output.txt");   这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文 件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操 作很像。 对不了解控制台输出"cout"的人, 这里有个例子。 int num = 150; char name[] = "John Doe"; fout << "Here is a number: " << num << " "; fout << "Now here is a string: " << name << " ";   现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你 不再操作这个文件的时候才调用它,它会自动保存文件。 回写缓冲区会在保持文件打开的情况下保存文 件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样: fout << flush; fout.close();    现在你用文本编辑器打开文件,内容看起来是这样:   Here is a number: 150 Now here is a string: John Doe   很简单吧! 现在继续文件输入, 需要一点技巧, 所以先确认你已经明白了流操作,对 "<>" 比较熟悉了, 因为你接下来还要用到他们。继续…   二、ASCII 输入   输入和"cin" 流很像. 和刚刚讨论的输出流很像, 但你要考虑几件事情。在我们开始复杂的内容之前 , 先看一个文本:   12 GameDev 15.45 L This is really awesome!   为了打开这个文件,你必须创建一个in-stream对象,?像这样。 ifstream fin("input.txt");   现在读入前四行. 你还记得怎么用"<<" 操作符往流里插入变量和符号吧?好,?在 "<>" (提取) 操作符. 使用方法是一样的. 看这个代码片段.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值