C++——文件的概念

C/C++中的文件是非常重要的概念。所谓“文件”一般是指,存储在外部介质上数据的集合, 并且是一组相关数据的有序集合。当文件被使用时,将其调入内存中。

文件可分为两种:一种是上述所说的,就是驻留在磁盘或其他外部介质上的一个有序数据集,可以是数据文件、可执行程序等;另一种是设备文件,是指和主机相联的各种设备,像显示器、键盘、打印机等;外部设备一般可以看作一个文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。

在C语言中,文件的类型可以分为两种:缓冲型和非缓冲型。文件系统的读写因此也分为两种方法:缓冲文件系统-般用来处理文本文件;非缓冲文件系统可以用来处理二进制文件。C语言函数库中包含了大量的文件处理函数。当需要使用这批函数时,需要在源程序中包含头文件“stdio.h”。

同样在C++语言中,关于文件的处理功能更加高级,新封装了部分模板和部分类。常用的类包括:

  • ifstream 和wifstream,用来读取文件; wifstream 是字读取操作。
  • ofstream 和wofstream,用来将数据写入文件: wofstream 是字读取操作。
  • fstream 和wfstream,用于读/写文件; wfstream 是字读取操作。
  • filebuf 和wfilebuf,用来进行实际的字符读写: wfilebuf 是字读/写操作类。

注意:使用上述几个类时,需要包含头文件。

下面介绍在C++ STL (模板库)中如何使用文件操作。

1、文件标识

在C语言中,打开文件时一般需要使用标识符来表明文件的使用方式。同样,在C++语言中,打开文件时同样需要使用文件标识符( 文件模式常量)来说明文件的使用方式。常用的文件模式常量包括:

ios base: :in 打开文件,用于读取
ios base: :out 打开文件,用于改写或写入
ios base: :ate 打开文件,用于将文件指针移到文件末尾
ios base: :app 打开文件,写入时始终添加入尾端
ios base: : trunc 打开文件,将先前的内容移除
ios_ base: :binary 以二进制形式打开文件。

2、文件的读写

本小节主要讲述如何使用ifstream类和ofstream类。这两个类均包含了一批各自的成员函数。这些成员函数主要用于打开和关闭文件,设置文件缓冲区,读取和写入文件,文件指针定位等。下面举例说明文件的读/写操作。下例代码实现的功能是将源文件中的内容读取出来,将这些内容再写入目标文件。

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
	ifstream f1 ;
	ofstream f2 ;
	char filename1 [256] ;
	char filename2[256] ;
	char content[256] ; 
	cout<<"请输入文件名() :;            //输入源文件名
	cin>> filename1 ;
	cout<<"请输入文件名(目的) :";          //输入目标文件名
	cin>> filename2;
	f1.open(filenamel,ios::in) ;       //打开源文件,用于读取
	f2.open (filename2, ios::out) ;    //打开目标文件,用于写入
	while(!f1.eof())
	f1.getline(content,128) ;         //读取文件中 数据
	f2<<content< <endl ;
	//将数据写入目标文件
	f1.close() ;
	f2.close() ;
}

3、文件流状态检查

C++文件流类从ios_base类那里继承了一个流状态成员。这个流状态成员指出流状态的信息:一切顺利,已达文件尾,I/O操作失败等。例如: fail(); is _open(); eof()。

4、使用临时文件

软件开发过程中,经常需要使用临时文件。临时文件的存在是短暂的,必须受程序控制。在C++中,创建临时文件、复制另一个文件的内容并删除文件其实都很简单。首先,需要为临时文件制订一个命名方案,确保每个文件都被指定为独一无二 的文件名。cstdio 库函数中声明的tmpnam()标准函数可以帮助您。函数原型如下:

char* tmpnam(char * pszname )

tmpnamn()函数创建-一个临时文件名(注意: 仅仅产生-一个文件名),将它放在pszname指向的C风格字符串中。常量L tmpnam和TMP MAX限制了文件名包含的字符数,以及在确保当前目录中不生成重复文件名的情况下,tmpnam()可以被调用的最多次数。临时文件的使用方法见下面代码。

提示:在例1-12的代码中,头文件cstio其实是原C语言中的头文件stdio.h,变量TMP_ MAX在本例中值为32767,表明临时文件名字符长度的变量L__tmpnam 的值在本例中是14。文件名是随机产生的,所有的临时文件输出到屏幕上。

#include <iostream>
#include. <cstdio>
void main()
{
	using namespace std;
	cout<<"This system can generate up tp "<<TMP_ MAX<<" temporary names of up to "<<L
	tmpnam<<" characters. \n";
	char pszName[L_tmpnam] = {'\0'};
	cout<<"Here are ten names :\n";
	for(int i=0;i<10;i++)
	tmpnam(pszName);       //生成临时文件名
	cout<<pszName<<endl ;
]
	return; 
}

总结:
如果对C语言中的文件操作已经熟练,那么理解上面所说的应该是比较轻松的。唯一不同的是,在C++中使用了模板库和常用的I/O类。读者可以执行附例中的可执行程序,或者重新编译源文件之后执行,体验一下产生临时文件名的过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值