文件输入输出


参考:

  • C++primer第五版8.2,P283

1 使用文件流对象

头文件<fstream>定义了三个类来进行文件的输入输出:

功能
ifstream从文件输入流中读取数据
ofsteram向文件输出流中写入数据
fstream继承了ifstream和ofstream

这些类提供的操作与我们之前使用过的cin和cout的操作一样,此外,它们还增加了一些新的函数来管理与流相关的文件:

//下面的fstream是ifstream、ofstream、fstream中的一种

//创建一个未绑定文件流的fstream对象
fstream fstrm1;
//将fstream1与文件filename关联,文件模式为mode
fstrm1.open(filename,mode);

//创建一个fstream对象,并与文件filename关联,默认文件模式与fstream的具体类型有关
fstream fstrm2(filename);

//创建一个fstream对象,与filename文件关联,文件模式为mode
fstream fstrm3(filename,mode);

//关闭与fstrm关联的文件流
fstrm1.close();

2 文件打开模式

每个流都有一个关联的文件模式,用来指出如何使用文件:
在这里插入图片描述

2.1 读写模式

(1)头文件:包含头文件 #include<iostream>和 #include<fstream>
(2)只从文件读取: in方式
         判断读取文件尾:

while (fin >> data&&!fin.eof())
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	ifstream fin;
	int data;
	fin.open("d:\\test.txt",ios::in);
	fin >> data;
	fin.close();//注意必须关闭文件
}

(3)写入到文件中:out方式和app方式

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	ofstream fout;
	int data = 10;
	fin.open("d:\\test.txt",ios::out);   //文件全部清空再写入
	//fin.open("d:\\test.txt",ios::app); //追加方式
	fout << data;
	fout.close();//注意必须关闭文件
}

(3)同时从文件中读取写入 : ios::out | ios::in方式

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	fstream f;
	f.open("d:\\test.txt", ios::out | ios::in);
	f.close();//注意必须关闭文件
}

2.二进制模式

(1)打开方式与文本文件类似,只需加上ios::binary

	fstream f;
	f.open("d:\\test.txt",ios::binary| ios::out | ios::in);

(2)seekp()、seekg()、tellp()、tellg()

ostream& seekp( streampos pos );
ostream& seekp( streamoff off, ios::seek_dir dir );
istream& seekg( streampos pos );
istream& seekg( streamoff off, ios::seek_dir dir );
参数说明:
pos:新的文件流指针位置值
off:偏移量:单位是字节
dir:搜索的起始位置
dir取值:
ios::beg:文件流的起始位置
ios::cur:文件流的当前位置
ios::end:文件流的结束位置

tellp()返回读指针位置(字节数)
tellg()返回写指针位置(字节数)

(3)通过read()和write()进行读写

int data;
f.read((char*)& data, sizeof(data));
或 f.write((char*)& data, sizeof(int));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值