C++文件打开方法

C++文件打开方法

为什么要打开文件

有时候,我们需要把一些内容保存到文件中,以便后期使用。今天小编就来介绍一下如何打开文件。

如何打开文件

C和C++都能用的

freopen版

freopen是重定向函数。重定向是什么意思?就是本来输入输出好好的(输入在屏幕上输入,输出在屏幕上输出),你一个freopen,输入在文件中读取,输出在文件中写入了。是不是一听就感觉很方便呢。下面给出freopen的函数格式及返回类型:

FILE* freopen(const char* filename,const char * mode,FILE* stream)

filename:要打开的文件名
mode:打开的模式(r/w)(和fopen一样)
stream:通常使用标准流文件(stdout/stdin/stderr)
stdout是标准输出流,默认为屏幕;
stdin是标准输入流,默认从屏幕上读入;
stderr是标准错误流,一般把屏幕设为默认。
例子:
从in.txt中读取数据,把他们的和保存到out.txt中。
代码:

#include <iostream>
#include <cstdio> //使用freopen,需调用cstdio库
using namespace std;
int main() { 
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
	int sum = 0, n;
	while(scanf("%d",&n) == 1) sum += n;
	cout << sum << endl;
	fclose(stdin); fclose(stdout); //关闭文件
	return 0;
}

in.txt数据(输入可以复制):

1 2 3 4 5

out.txt结果:
15
顺便说一句,如果想再次使用标准输入输出,只要把输入输出文件名改成"CON"再去掉fclose即可。

fopen版

freopen用起来很方便,但是有些竞赛不允许用freopen读写文件。可以使用fopen,对printf、scanf适用。函数格式即返回类型:

FILE* fopen(const char* Filename,const char* Mode)

还是上面那个例子和一样的样例:
输入文件数据(可以复制):

1 2 3 4 5

输出文件数据:
15
用fopen实现:

#include <cstdio> //使用fopen,需包含cstdio库
using namespace std;
int main() { 
	int n, sum = 0;
	FILE *fin, *fout;
	fin = fopen("in.txt","r");
	fout = fopen("out.txt","w");
	while(fscanf/*将scanf改成fscanf*/(fin/*在%d前面添加输入文件参数,其它的不用修改*/, "%d", &n)) { 
		sum += n;
	}
	fprintf/*将printf改成fprintf*/(fout/*在%d前面添加输出文件参数,其他的不用修改*/, "%d", sum);
	fclose(fin);fclose(fout); //关闭文件
	return 0;
}

先声明文件指针fin和fout,然后用fopen函数指向文件,其它修改的地方请看注释。
如果想使用标准输入输出,只要赋值fin = stdin;fout = stdout;并去掉fclose即可。
为什么说C和C++都能用呢?因为你看cstdio前面有个c,转换成C头文件的话就去掉第一个c,然后在末尾加上.h就可以了(变成stdio.h)。

只有C++能用的

文件输入输出流(fstream)

cout、cin就是输入输出流。所以文件输入输出流对cin、cout语句是适用的。
由于C++中没有现成的文件输入输出流,所以要包含进头文件fstream。
fstream中有两个类,一个文件输入流(ifstream),一个文件输出流(ofstream)。
还是上面那个例子和样例:
in.txt数据(可以复制):

1 2 3 4 5

out.txt数据:
15

#include <fstream> //顺便说一句,iostream是包含在fstream里面的
using namespace std;
int main() { 
	ifstream fin("in.txt"); //赋值,方式为ifstream/ofstream 变量名("文件名.后缀名");
	ofstream fout("out.txt");
	int n, sum = 0;
	while(fin >> n/*跟cin差不多*/) sum += n;
	fout << sum << endl; //跟cout差不多,也能使用endl
	fin.close(); fout.close(); //关闭文件
	return 0;
}

如果想再次使用cin、cout,是否要逐个把fin和fout替换为cin和cout?不用这么麻烦,只需要去掉声明语句和关闭文件,并在using namespace std;后面加上这两行即可:

#define fin cin
#define fout cout

喜欢的话记得点个赞哦!

    原文作者:MATT1130
    原文地址: https://blog.csdn.net/weixin_46700012/article/details/107988146
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞