1、第九章 文件 常用的文件有两类,一类是程序文件,如c++的源程序文件(.cpp)等,另一类是数据文件。在程序运行时,常常需要将一些数据输出到磁盘中存放起来,以后需要时再从磁盘中输入到计算机内存。这种磁盘文件就是数据文件。程序中的输入和输出的对象就是数据文件。 根据文件数据的组织形式,可分为ASCII文件和二进制文件。 对数据文件读或写,都要先建立或打开这个数据文件。 C++语言把文件看成有序ASCII码,建立和打开一个文件,实现简单的文件输入和输出操作。 在C++语言中能够比较简单实现对文件的输入、输出操作。 在这章里,会详细解释ASCII文件的输入输出的每个细节。ASCII文
2、件又称文本文件或字符文件。它的每个字节放一个ASCII码,代表一个字符。二进制文件不经常使用,就不介绍了。
由程序进行文件处理时,必须要包含头文件
3、stream fout("e:\dev-c++\one.out"); 定义了一个输出文件流fout,同时把one.out文件与fout相关联。对fout的操作就是对one.out文件的操作。通过对fout的操作,把数据写入到文件并保存起来。 完成文件操作后,应该把文件关闭。关闭文件的方法是:fout.close(); 即调用文件流的成员函数close(). 关闭文件是解除one.out磁盘文件与fou流的关联,原来设置的工作方式也随之失效。这样就不能通过文件流对one.out文件进行输出操作了。 二、从指定文件中读取数据 从文件中读取数据可以使用输入文件流,建立与某文件相关联
4、输入文件流。 例如:ifstream fin(“文件名”); 当文件名为one.in时,什么语句表述为:ifstream fin(“one.in”); 定义了一个输入文件流fin,同时把one.in文件与fin相关联。对fin的操作就是对one.in文件的操作。通过对fin的操作,把数据写入到内存中。 完成文件操作后,应该把文件关闭。关闭文件的方法是:fin.close(); 应用举例 [例1]、总留空时间(shi.cpp) 【问题描述】未来工程师的竞赛中,设计的飞船在空中可以逐个放出纸蜻蜓,每个纸蜻蜓在空中飘的时间有长有短。从第一个放出的纸蜻蜓开始降落时间到全部纸蜻蜓
5、接触地面的时间的差的绝对值,叫总留空时间。
【输入文件】
文件名:time.in 。文件中有二行,第一行只有一个整数n,是纸蜻蜓的个数。不用判断n的合理性。1<=n<=1000.
第二行有n对用一个空格分隔的整数,是每只纸蜻蜓的开始降落时间和接触地面的时间。
【输出文件】
文件名:time.out 。只有一个整数。从第一行第一列的位置开始输出总留空时间。
【举例】
time.in 内容:
3
4 17
2 10
5 11
time.out内容如下
15
参考程序如下:
#include
6、输出文件库 using namespace std; ifstream fin("shij.in");//将外部文件shij.in与fin建立联系,对fin的操作,就是对//shij.in的操作。 ofstream fout("shij.out");//同上,对fout的操作就是对shij.out文件的操作。 int main() { int n,i,max,min,x,y; max=-1;min=32768; fin>>n;//读入数据行数 for(i=1;i<=n;i++) { fin>>x>>y;//每行读入两个数 if(x<
7、min)min=x;//找最小值
if(y>max)max=y;//找最大值
}
fout< 8、向,无名指数14,中指数15,食指数16,拇指数17……。
按上述规律,如果随便说出一个数,你能够立即指出它应落在哪个手指上吗?例如33,应落在拇指上。
试设计程序解决这个问题。
从文件”shouzhi.in”中读入个数字,输出到文件“shouzhi.out”中,是哪个手指。
例如:
【输入文件】
shouzhi.in
33
【输出文件】
shouzhi.out
mu zhi
参考程序如下:
#include 9、in");
ofstream fout("shouzhi.out");
int main()
{ int n,i,j;
char a[8]={'s','m','s','z','w','x','w','z'};
fin>>n;
j=n%8;
switch(a[j])
{
case 's':fout<<"shi zhi"< 10、ase 'z':fout<<"zhong zhi"< 11、
fin.close();
fout.close();
return 0;
}
文件读写的一些概念:
ofstream fout("file.dat", ios::binary);
"ios::binary"是你提供的打开选项的额外标志. 默认的, 文件以ASCII方式打开, 不存在则创建, 存在就覆盖. 这里有些额外的标志用来改变选项。
ios::app 添加到文件尾
ios::ate 把文件标志放在末尾而非起始。
ios::trunc 默认. 截断并覆写文件。
ios::nocreate 文件不存在也不创建。
ios::noreplace 文件存在则失败。
文件状态
一个状态函数是eof(), 它返回是否标志已经到了文件末尾。 主要用在循环中。 例如, 这个代码断统计小写‘e’ 在文件中出现的次数。
ifstream fin("file.txt");
char ch; int counter;
while (!fin.eof())//如果文件没有到文件尾,则执行循环题,否则不循环。
{
ch = fin.get();
if (ch == ‘e’) counter++;
}
fin.close();
fout.close();
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818