首页 > 技术文章 > C++文件读写

area-h-p 2019-02-24 14:15 原文

文件的使用步骤如下:

1.说明一个文件流对象,这又被称为内部文件:

ifstream ifile; //只输入用
ofstream ofile; //只输出用
fstream iofile; //既输入又输出用

2.使用文件流对象的成员函数打开一个磁盘文件。这样文件流对象和磁盘文件名之间建立联系。文件流中说明了三个打开文件的成员函数。

void ifstream::open(const char*, int=ios::in, int=filebuf::openprot);
void ofstream::open(const char*, int=ios::out, int=filebuf::openport);
void fstream::open(const char*, int, int=filebuf::openport);

第一个参数为要打开的磁盘文件名。第二个参数为打开方式,有输入(in),输出(out)等,打开方式在ios基类中定义为枚举类型。第三个参数为指定打开文件的保护方式,一般取缺省。

所以第二部可如下进行:

iofile.open("TEST.txt", ios::in | ios::out);

打开文件也应该判断是否成功,若成功,文件流对象值为非零值,不成功则为0(NULL),文件流对象值物理上就是指它的地址。

因此打开一个文件完整的程序为:

fstream iofile("TEST.txt", ios::in | ios::out);
if(!iofile)
{
     cout<<"打开文件失败!"<<"TEST.txt"<<endl;
     exit(1);//失败退回操作系统    
}

3.使用提取和插入运算符对文件进行读写操作,或者使用成员函数进行读写。

4.关闭文件。三个文件流类各有一个关闭文件的成员函数。

void ifstrean::close();
void ofstream::close();
void fstream::close();

文件打开过程示例代码如下

#include<iostream>
#include<fstream>
using namespace std;

void main()
{
	int ar[] = {65,66,67,68,69,1134688,71,70,73,74}, br[10];
	ofstream ofile;//①
	ofile.open("TEST.txt", ios::out);//②
	if(!ofile)
	{
		cerr<<"Open File Fail."<<endl;
		exit(1);
	}
	for(int t=0; t<sizeof(ar)/sizeof(int); ++t)//③
		ofile<<ar[t]<<" ";//向文件内写入
	ofile.close();//④

	ifstream ifile;
	ifile.open("TEST.txt", ios::in);
	if(!ifile)
	{
		cerr<<"Open File Fail."<<endl;
		exit(1);
	}
	for(int t=0; t<10; ++t)
		ifile>>br[t];//从文件内读出并写入br中
	ifile.close();
}

查看是否生成文件TEST.txt和br[10]内是否有数据

文件打开方式是在ios类中定义的,公有枚举成员:

使用方式与格式控制符相同。

在C++中可以又程序移动文件指针,从而实现文件的随机访问,即可读写流中任意一段内容。一般文件很难准确定位,所以随机访问多用于二进制文件。

在ios类中说明了一个公有枚举类型:

enum seek_dir
{
       beg=0,//文件开头
       cur=1,//文件指针的当前位置
       end=2//文件结尾
}
#include<iostream>
#include<fstream>
using namespace std;

void main()
{
	int ar[] = {65,66,67,68,69,70,71,70,73,74}, br[10], pos,value;
	ofstream ofile;
	ofile.open("TEST.txt", ios::out);
	if(!ofile)
	{
		cerr<<"Open File Fail."<<endl;
		exit(1);
	}
	for(int i=0; i<sizeof(ar)/sizeof(int); ++i)
		ofile<<ar[i]<<" ";
	ofile.close();

	ifstream ifile;
	ifile.open("TEST.txt", ios::in);
	if(!ifile)
	{
		cerr<<"Open File Fail."<<endl;
		exit(1);
	}
	while(1)
	{
		cout<<"input pos = ";
		cin>>pos;
		ifile.seekg(3*pos, ios::beg);
		ifile>>value;
		cout<<value<<endl;
	}
	ifile.close();
}

运行结果

推荐阅读