C++ 打开文件/读取文件 基本方法与操作 (文件模式、读取方式等)


打开文件有三步:

1. 打开文件的方法

创建一个文件流,并绑定一个文件。

操作说明
fstream fs;创建一个未绑定的流fs
fstream fs(s);创建一个流,并打开名为s的文件,s可以是string或C风格字符串
fstream fs(s, mode);同上,并指定以mode模式打开

如果创建的时候没有绑定,也可以用open()函数打开:

fs.open(s);	//s可以是string或C风格字符串
			//默认的mode依赖于fstream类型

请养成检测open是否成功的习惯!

注意:

一旦一个文件流已经打开,它就保持与对应文件的关联。实际上,对一个已经打开的文件流调用open 会失败,并会导致failbit被置位。随后的试图使用文件流的操作都会失败。为了将文件流关联到另外一个文件,必须首先关闭已经关联的文件。一旦文件成功关闭,我们可以打开新的文件。

1.1 文件模式

也就是之前说的mode,常见的mode如下:

模式说明要求
in不能是ofstream
out写,默认会同时trunc不能是ifstream
app每次写操作都定位到文件末尾
如果只设置了app则默认也指定out
trunc没被设定
ate打开文件后立即定位到文件末尾
trunc截断文件必须设置了out
binary以二进制方式进行IO

如:

ofstream out;
out.open("a.txt", ios::app);
//有时候也用下面的样子:
//out.open("a.txt", ostream::app);

每个文件流类型都定义了一个默认的文件模式,当我们未指定文件模式时,就使用此默认模式。与 ifstream关联的文件默认以in模式打开;与ofstream关联的文件默认以out模式打开;与fstream 关联的文件默认以in和 out模式打开。

如果我们想自己指定文件模式,则需要遵循上表规则。

注意:ofstream打开一个文件时,文件的内容会被丢弃,阻止一个ofstream清空的唯一方式是显式指定appin模式

1.2 判断打开是否成功

可以用is_open()函数判断文件是否成功打开且尚未关闭:

fs.is_open();	//返回bool值

2. 读取内容

读取内容
逐词读取 >>
逐行读取 getline
逐字符读取 get

直接看示例吧:

// 前情提要(需要的变量)
istream ifs(s);
string s;
char c;
char tmp[1024];

第一种:

// 第一种:>>
string tmp;
while (ifs >> tmp)
{
    cout << tmp << endl;
}
// 这种方法会从ifs中逐个单词读取(也就是遇到空格、换行时会停止)

第二种:

// 第二种:getline()
while (getline(ifs, s))	//1024是单次读取的最大字符数量
{
    cout << s << endl;
}
// 可以和sstream结合使用

// 或者:
while (ifs.getline(tmp, 1024))	//注意上面的可以对string使用, 而这个是char*
{
    cout << tmp << endl;
}

第三种:

// 第三种:get()
while( (c = ifs.get())= EOF)
{
    cout << c;					//一个字符一个字符输出
}
// 不推荐,效率低

3. 关闭文件

f.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值