文件读写
本文主要介绍C/C++语言的文件操作相关知识点。
基本概念:C
文件系统功能是操作系统的重要功能和组成部分。在操作系统中,文件是指保存在外部介质的一个有序数据集,例如源文件、目标程序文件、可执行程序,或待输入的原始数据或输出的结果数据。一般把源文件、目标文件和可执行程序称为程序文件,输入/输出数据称为数据文件。为了提高数据存取访问的速度,C程序对文件的处理采用缓冲文件系统的方式进行,即程序与文件的数据交换通过缓冲区进行。文件系统分为缓冲文件系统和非缓冲文件系统。缓冲文件系统由操作系统自动完成,非缓冲文件系统有程序控制。写文件:首先把数据写入文件缓冲区,当写满内存缓冲单元(如512B),操作系统自动把全部数据写入磁盘的一个扇区,然后清空文件缓冲区,新的数据继续写入到文件缓冲区。读文件:系统首先自动把一个扇区的数据导入文件缓冲区,供C程序逐个读入数据,一旦内存缓冲单元的数据被全部读入,系统自动把下一个扇区的数据导入文件缓冲区,供C程序继续读入新的数据。
相关操作函数:
1.头文件:#include<stdio.h>
2.打开文件:fopen("文件名","文件打开方式");//文本文件:只读"r"、只写"w"、追加"a"、读写"r+"、新建读写"w+"、打开读写追加"a+"
示例:
FILE* fp;
fp = fopen("abc.txt","r");//或者
FILE* fp = fopen("abc.txt","r");
3.关闭文件:fclose(文件指针);
4.字符读写函数:fputc(char ch, FILE* fp);//写字符char ch = fgetc(FILE* fp);//读入字符
5.字符串读写函数:fputs(s,fp);//写字符串,s:字符串,fp:文件指针fgets(s,n,fp);//读入字符串,s:字符串,n:读入的字符个数,fp:文件指针
6.格式化文件读写函数:fscanf(文件指针,格式字符串,输入表);fprintf(文件指针,格式字符串,输出表);
FILE* fp;
int n;
float x;
fp = fopen("a.txt","r");
fscanf(fp,"%d%f",&n,&x);
fprintf(fp,"%d%f",n,x);
6.其他函数:feof(fp);//判断文件的末尾标志
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;//定义文件指针
char ch = 'f';
char chs[] = "File";
char strout[5];
if((fp=fopen("chsFile.txt","w")) == NULL)//写方式打开文件 ,并判断是否正确打开
{
printf("File open error!\n");
exit(0);
}
// ch = getchar();
fputc(ch,fp);//写字符到文件fp
fclose(fp);//关闭文件
if((fp=fopen("chsFile.txt","a+")) == NULL)//写方式打开文件 ,并判断是否正确打开
{
printf("File open error!\n");
exit(0);
}
fputs(chs,fp);//写字符串到文件fp
fclose(fp);//关闭文件
if((fp=fopen("chsFile.txt","r")) == NULL)//读方式打开文件 ,并判断是否正确打开
{
printf("File open error!\n");
exit(0);
}
while(fgets(strout,5,fp) != NULL)//读入字符串
{
printf("%s",strout);
}
puts(chs);//显示到屏幕
fclose(fp);
return 0;
}
基本概念:C++
头文件:
#include<ofstream>//文件写操作
#include<ifsrtream>//文件读操作
#include<fstream>//文件读写操作
写入文件:
1.创建一个ofstream对象来管理输出流;
2.将该对象与特定的文件关联起来;
3.使用类似cout的<<插入运算符实现写操作。
读文件:
1.创建一个ifstream对象来管理输入流;
2.将该对象与特定的文件关联起来;
3.使用类似cin的>>方式读取数据。
关闭文件:当输入/输出流对象过期时,到文件的连接自动关闭;也可以调用函数close()显示关闭
is_open():检查文件是否被打开的新的C++方法
fstream fin;
if(!fin.is_open())
{
cout<<"error! open file!!"<<endl;
}
文件模式:
ios_base::in 打开文件,读操作
ios_base::out 打开文件,写操作
ios_base::app 打开文件,追加写操作
ios_base::ate 打开文件,移到文件尾
完整示例:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
string filename = "HiFile.txt";
string fileContents[5] = {"Hello","Mr.","Fan","How are you?"};
ofstream fout(filename,ios_base::out);
if(fout.is_open())
{
for(int i=0;i<10;i++)
{
fout<<fileContents[i]<<"\n";
}
fout.close();
}
return 0;
}