c++ 文件操作
文件的概念
文件的位置
文件流
文件访问
在前边的课程里,我们的数据都是放在内存里,一旦程序结束,数据就会消失。为了长久的保存数据,我们可以把数据存放到文件里边。这一节课我们一起讨论一下文件的相关概念。
一、 文件的概念
文件简单的说就是电脑中存放的一组数据的集合。类似于内存里一块连续的数据,与内存数据的区别在于文件一般是保存在硬盘上即使电脑断电后不会不消失,方便我们多次访问或者修改。
二、 文件的位置
文件的位置 一般有文件头,当前位置,文件尾这三个位置。
0 |
1 |
2 |
3 |
4 |
5 |
6 |
|
|
|
|
|
|
|
|
|
|
+5
三、 文件流
C库提供了读写数据流的函数来访问操作文件。流也是外部数据或者数据目的地的抽象表示,所以键盘,显示器上的命令行和磁盘文件都是流。因为可以使用输入输出函数读写映谢为流的任意外部设备。
这里我们主要讨论文件流,将数据写入流(文件)有两种方式。
1、一种是写入文本文件,此时数据写入为字符,这些字符组织为数据行,每一行都用换行符结束。(二进制数据,如int 或者double类型的值,必须先转换成字符才能写入文本文件)
2、另一种是写入二进制文件,写入二进制文件的数据总是写入为一系列的字节,与它在内存中的表示形式相同。
四、文件访问
在C语言中操作处理文件时,是通过文件指针来引用文件的。
文件指针是一个抽象的指针,它关联到要访问的一个特定文件上,所有的程序可以在不同的情况下处理不同的文件。文件指针指向表示流的结构。
如果要同时使用几个文件,就需要对每个文件使用不同的文件指针,但使用完一个文件后,可以将文件指针关联到另一个文件上。因此,如果要处理多个文件,但一次只处理一个,那么用一个文件指针就够了。
下一节课,我们再一起讨论文件的建立,重命名及关闭等操作。
l 打开文件fopen
l 建立文件
l 关闭文件fclose
一、打开文件fopen
FILE *fopen( const char *filename, const char *mode );
filename是要操作的文件名。
mode |
说明 |
"w" |
打开一个文本文件,进行写入操作。如果文件不存在,则会建立一个新文件. 存在则清空内容。 |
"a" |
打开一个文本文件,进行追加操作。如果文件不存在,则会建立一个新文件. 存在则追加内容。 |
"r" |
打开一个文本文件,进行读取操作。 |
"w"
FILE* f;
f=fopen("test.txt","w");
f=fopen("test.txt","a");
f=fopen("test.txt","r");
二、关闭文件fclose
int fclose( FILE *stream );
教学内容: 写入文本文件fputc 读取文本文件fgetc FILE *fopen( const char *filename, const char *mode ); filename是要操作的文件名。 mode 说明 "w" 打开一个文本文件,进行写入操作。如果文件不存在,则会建立一个新文件. 存在则清空内容。 "a" 打开一个文本文件,进行追加操作。如果文件不存在,则会建立一个新文件. 存在则追加内容。 "r" 打开一个文本文件,进行读取操作。 "w" FILE* f; f=fopen("test.txt","w");//指针指向文件头 f=fopen("test.txt","a");//指针指向文件尾 f=fopen("test.txt","r"); //指针指向文件头,如果打开失败会返回NULL 关闭文件fclose int fclose( FILE *stream ); //如果成功关闭返回0,不成功则返回EOF,EOF一般定义为-1; 一、写入文本文件fputc int fputc( int c, FILE *stream ); 功能:向文件写入一个字符,且指针下移。 二、读取文本文件fgetc int fgetc( FILE *stream ); 功能:从文件中获取一个字符,且指针下移。 #include <stdio.h> int main(void) { FILE* f; char i; f=fopen("test.txt","w");//"w","a" for (i='A';i<='Z';i++) { fputc(i,f); } fclose(f);//重要 f= fopen("test.txt","r"); for (i=1;i<=26;i++) { printf("%c",fgetc(f)); } fclose(f); getchar(); getchar(); return 0; }
教学内容: 将字符串写入文本文件fputs 从文本文件中读取字符串fgets 上一课我们认识了 fputc和 fgetc是对文件进行字符的读写。 一、将字符串写入文本文件fputs int fputs( const char *string, FILE *stream ); //int fputs(char *pstr,FILE *pfile); string待写入的字符串地址; stream表示文件指针 二、从文本文件中读出字符串fgets char *fgets( char *string, int n, FILE *stream ); //char* fgets(char *pstr,int ncahrs,FILE *pfile); string是用于存放字符串的缓冲区。 n表示要读出字符的个数。 stream表示文件指针 puts(char* s);//把字串输出到屏幕 gets(char* s);//读入字符串 int main(void) { FILE* f; char i; char s[256]; ////写字符串 f=fopen("test.txt","w");//以写入模式打开文件 gets(s);//scanf("%s",s);//从控制台读取字符串 fputs(s,f);//向文件test.txt写入字符串s fclose(f);//关掉指针与文件的关联 //读字符串 f=fopen("test.txt","r");//以读取模式打开文件test.txt fgets(s,256,f);//从文件读取字串到s地址开始的缓存区 puts(s);//printf("%s",s); 把字串输出到控制台显示出来或者理解为向控制台屏幕写入字符串 fclose(f);//关掉指针与文件的关联 getchar(); getchar(); return 0; }
教学内容: 格式化文件输出fprintf 格式化文件输入fscanf fputc和fgetc是读写文件字符操作相关函数。 //putc,getc是控制台输入输出字符的函数 fputs和fgets是读写文件字符串操作相关函数。 //puts,gets 是控制台输入输出字符串的函数 一、格式化文件输出fprintf int fprintf( FILE *stream, const char *format [, argument ]...);//printf 输出到控制台 其作用是格式化输出到文件中; 例:fprintf(pfile,"%d%f",n1,f1);//把n1格式化为字串存到文件,把f1格式化为字串存到文件 输出整数 输出浮点数 输出字符 输出字符串 ////写字符串 f=fopen("test.txt","w");//以写入模式打开文件 fprintf(f,"%10d%10d%16f %s",111,222,f1,"xxxbbb"); printf("%d %d %f %s",111,222,f1,"xxxbbb"); fclose(f);//关掉指针与文件的关联 二、格式化文件输入fscanf int fscanf( FILE *stream, const char *format [, argument ]... );//scanf从控制台获取输入 从一个流/文件中执行格式化输入到变量 例:fscanf(pfile,"%d%d",&n1,&n2); //从文件中读取整数到n1和n2中 //读字符串 //f=fopen("test.txt","r");//以读取模式打开文件test.txt //fscanf(f,"%d%d%f%s",&n1,&n2,&f1,s); //printf("%d %d %f %s",n1,n2,f1,s); //fclose(f);//关掉指针与文件的关联