如何用到c/c++文件

很多大一新生,特别是刚接触计算机的萌新们,对于c/c++文件可能会感到很迷茫,往往无从下手,而且老师课堂时间讲的又少,不知道如何用到文件。今天,小编就来为大家初步讲解一下c/c++文件如何操作(因为本人也是萌新,所以尽量会从萌新的角度去讲解,后续学到了新东西后会继续和大家一起分享的)。
在此,大家首先应该了解以下几点(已经知道的小伙伴可以直接掠过这一部分):
1,什么是文件路径名。比如,我在D盘下有一个名称为exercise的txt文件,那么它的路径为D:\\exercise.txt;那么要是这个exercise是一个文件夹,它里面的一个名为hello的txt文件,那它的路径名就为D:\\exercise\\hello.txt(这里可以用\\,也可以用\,还可以用/,不过小编建议用\\,因为可以避免转义字符的干扰)。其他小编就不再赘述了,大家可以去bing里面搜索文件路径名如何表示,小编看了那里面有更为详细的讲解。
2,文件的打开方式。
文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:

r(read): 读

w(write): 写

a(append): 追加

t(text): 文本文件,可省略不写

b(banary): 二进制文件

+: 读和写
r 打开只读文件,该文件必须存在
r+ 打开可读可写的文件,该文件必须存在(这里的写文件是指将之前的文件覆盖
rt 打开只读文本文件,该文本必须存在
rt+ 读写打开一个文本文件,允许读和写,该文件必须存在(这里的写文件是指将之前的文件覆盖
rb 只读打开一个二进制文件,,该文本必须存在
rb+ 读写打开一个文本文件,允许读和写,该文件必须存在(这里的写文件是指将之前的文件覆盖

w 打开只写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
w+ 打开可读写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件(这里的读文件,同样需要使用rewind()函数)
wt 打开只写文本文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
wt+ 打开可读写文本文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
wb 打开只写二进制文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
wb+ 打开可读写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件

a以附加的方式打开只写文件,若文件不存在,则建立文件,存在则在文件尾部添加数据,即追加内容
a+以附加的方式打开可读写文件,不存在则建立文件,存在则写入数据到文件尾(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)
at二进制数据的追加,不存在则创建,只能写。
at+读写打开一个文本文件,允许读或在文本末追加数据(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)
ab二进制数据的追加,不存在则创建,只能写。
ab+读写打开一个二进制文件,不存在则创建,允许读或在文本末追加数据(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)

接下来,我就来介绍如何用C语言的文件格式去进行文件的读写:
我们还是先来介绍一下C的文件读写方式
首先,我们要先定义一个文件指针,如FILE *fp;这个fp就是文件指针了。
我们再来介绍文件的读写:
1,打开一个文件:fopen(“文件路径名(我用上面我提到的D:\\exercise.txt)”,“文件打开方式”),(注意,引号是必须的)。这样,我们就可以以我们想要的方式打开一个文件了,比如,我想读入一个文件里的内容而且这个文件存在,那么我就可以用"r",如果这个文件不存在的文件,要把一些内容写入文件里去,我们就可以用"w+",等等等等。因为它返回的是一个地址,所以我们用一个指针变量去接收它,fp=fopen(“D:\\exercise.txt”,“r+”)。
2,我们还要检查一下文件是否打开成功

FILE *fp;
if((fp=("D:\\hello.txt","r"))==NULL)
{
	cout<<"文件打开错误"<<endl;
	exit(0);
}

3,既然打开了就要关闭文件:fclose(FILE *fp),关闭一个已打开的文件。
4,从文件里读取一个字符,fgetc(FILE *fp),例如:char ch=fgetc(fp);在这里你读取到一个字符后,文件指针就会自动向后移一个单位,所以你就可以用循环进行遍历读取。
5,把一个字符写入到文件里去,fputc(FILE *fp),例如:
char ch;
fputc(ch,fp);

6,把一个字符串读入文件里,fputs(char *str,FILE *fp),例如:
char str[20]=“hello world”
fputs(str,fp);

7,从文件里读取num-1个字符到指定的字符串里,fgets(char *str,int num,FILE *fp),
这个函数的意义就是将文件里的num-1个字符(最后一个是换行符)读到str所指向的字符串里去。例如:
char str[20]=“hello world”
fgets(str,5,fp);

那么,输出字符串就会显示"hell"4个字符所组成的字符串。
8,fseek(FILE *fp,int offset,int where),这里的offset是指移动的字节数,而where是指移动的基准,从哪里开始移动,这个基准有三个:
SEEK_SET 0 从文件开头开始移动
SEEK_CUR 1从文件当前位置进行移动
SEEK_END 2从文件末尾位置开始移动
例如:
fseek(fp,1024,SEEK_CUR)表示从当前位置开始向后移动1024个字节
也可以表示为(fp,1024,1),这也是同样的效果。
9,从键盘中按格式输入写到文件里。
fprintf(FILE *fp,"%s",int num,char *str),讲一个字符串里的num-1个字符写入到文件
fprintf(FILE *fp,"%d",&n)将一个数字写到文件里
10,按文件里的格式进行打印到屏幕里
fscanf(FILE *fp,"%d%d",&a,&b)
11,把当前的位置回到文件开始。rewind(fp)
12,检查是否到了文件尾,若是,则返回真
if(feof(fp))
cout<<“已到文件尾”<<endl;
下面我们提供从键盘输入到文件流里的源代码

在#include<iostream>
using namespace std;
#include<stdlib.h>
struct student
{
	char name[20];
	int num;
	char sex;
};
int main()
{
	FILE *write;
	if((write=fopen("D:\\exercise.txt","w+"))==NULL)
	{
		cout<<"文件打开错误"<<endl;
		exit(0);
	}
	struct student stu[3];
	cout<<"请输入学生信息:"<<endl;
	for(int i=0;i<3;i++)
	{
		scanf("%s %d %c",stu[i].name,&stu[i].num,&stu[i].sex);
		fprintf(write,"%s\t%d\t%c\n",stu[i].name,stu[i].num,stu[i].sex);
	}
	fclose(write);
	return 0;
}

将文件流里的信息打印到文件屏幕,注意与文件里的数据格式要一致

#include<iostream>
using namespace std;
#include<stdlib.h>
struct student
{
	char name[20];
	int num;
	char sex;
};
int main()
{
	FILE *write;
	if((write=fopen("D:\\exercise.txt","r"))==NULL)
	{
		cout<<"文件打开错误"<<endl;
		exit(0);
	}
	struct student temp;
	while(fscanf(write,"%s\t%d\t%c\n",temp.name,&temp.num,&temp.sex)!=EOF)
	{
		printf("%s\t%d\t%c\n",temp.name,temp.num,temp.sex);
	}
	fclose(write);
	return 0;
}

最后,我们来提供用C++进行文件的读取读入操作的源代码
从文件里读取信息

#include<iostream>
#include<fstream>
#include<cstdlib>
const int SIZE = 60;
using namespace std;

int main()
{
	char str[SIZE];
	ifstream inFile;    //定义ifstream对象,接下来就可以像用cin一样用inFile了,不过只是它直接从文件里读入
	cout << "请输入文件名:";
	cin.getline(str,SIZE);   //输入文件名
	inFile.open(str);
	if (!inFile.is_open())
	{
		cout << "文件打开错误" << endl;
		exit(0);
	}
	double value;
	double sum = 0.0;
	int count = 0;
	inFile >> value;
	while (inFile.good())   //当文件读取成功
	{
		++count;
		sum += value;
		inFile >> value;
	}
	if (inFile.eof())   //检查文件停止读写的原因
	{
		cout << "已到文件末尾" << endl;
	}
	else if (inFile.fail())
	{
		cout << "文件读入错误" << endl;
	}
	else
	{
		cout << "文件莫名错误" << endl;
	}
	if (count == 0)   cout << "文件无数据" << endl;
	else
	{
		cout << "读入有效个数" << count << endl;
		cout << "sum=" << sum << endl;
		cout << "average=" << sum / count << endl;
	}
	inFile.close();  //关闭文件
	return 0;
}

将信息读入文件里

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

int main()
{
	char name[20];
	int year;
	double price;

	ofstream outFile;
	outFile.open("D:\\xiaoliang.txt");
	cout << "请输入姓名:";
	cin.getline(name, 20);
	cout << "请输入年龄:";
	cin >> year;
	cout << "请输入价格;";
	cin >> price;
	//用cout进行输出与屏幕
	cout << fixed;
	cout.precision(2);
	cout << "姓名:" << name << endl;
	cout << "年龄:" << year << endl;
	cout << "价格:" << price << endl;
	//用outFile进行文件读入
	outFile << fixed;
	outFile.precision(2);
	outFile << "姓名:" << name << endl;  
	outFile << "年龄:" << year << endl;
	outFile << "价格:" << price << endl;
	outFile.close();
	return 0;
}

今天的小结就这样了,日后学到了有关文件的新知识会第一时间与大家分享的,谢谢阅读!!!

发布了7 篇原创文章 · 获赞 0 · 访问量 222

猜你喜欢

转载自blog.csdn.net/TpeterH/article/details/103998998
今日推荐