C语言文件读写常用函数总结
有点小头疼这几天复习,可是总是有些小可爱问有关C语言文件方面的内容,在此写篇博文一劳永逸。
fopen函数
- 头文件:stdio.h
- 原型: FILE *fopen(const char *filename, const char *mode);
- 作用: 使用给定的模式 mode打开 filename 所指向的文件。
- 参数:
- filename: 所需打开文件的文件名。
- mode: 访问模式。
- r :以只读方式打开文件,该文件必须存在。
- r+:以读/写方式打开文件,该文件必须存在。
- rb+:以读/写方式打开一个二进制文件,只允许读/写数据。
- rt+:以读/写方式打开一个文本文件,允许读和写。
- w:打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
- w+:打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
- a:以附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF 符保留)。
- a+:以附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF符不保留)。
- wb:以只写方式打开或新建一个二进制文件,只允许写数据。
- wb+:以读/写方式打开或新建一个二进制文件,允许读和写。
- wt+:以读/写方式打开或新建一个文本文件,允许读和写。
- at+:以读/写方式打开一个文本文件,允许读或在文本末追加数据。
- ab+:以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
参数 | 功能 |
---|---|
r | 以只读方式打开文件,该文件必须存在。 |
r+ | 以读/写方式打开文件,该文件必须存在。 |
rb+ | 以读/写方式打开一个二进制文件,只允许读/写数据。 |
rt+ | 以读/写方式打开一个文本文件,允许读和写。 |
w | 打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
w+ | 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF 符保留)。 |
a+ | 以附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF符不保留)。 |
wb | 以只写方式打开或新建一个二进制文件,只允许写数据。 |
wb+ | 以读/写方式打开或新建一个二进制文件,允许读和写。 |
wt+ | 以读/写方式打开或新建一个文本文件,允许读和写。 |
at+ | 以读/写方式打开一个文本文件,允许读或在文本末追加数据。 |
ab+ | 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。 |
- 返回值:
文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL,并把错误代码存在error中。 - 运用
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
fp = fopen("abc.txt", "r");/* 以只读的方式打开,"abc.txt"文件 */
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
fclose(fp); /* 关闭文件 */
fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */
return 0;
}
fclose函数
- 头文件:stdio.h
- 原型: int fclose( FILE *fp );
- 作用: 把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。
- 参数:
- fp: 指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流
- 返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。
- 运用:
int main()
{
FILE *fp;
fp = fopen("abc.txt", "r");/* 以只读的方式打开,"abc.txt"文件 */
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
fclose(fp); /* 关闭文件 */
fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */
return 0;
}
fseek函数
- 头文件:stdio.h
- 原型: int fseek(FILE *stream, long offset, int fromwhere);
- 作用: 重定位流(数据流/文件)上的文件内部位置指针
- 注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变或指向别的文件。
- 参数:
- stream:文件指针
- offset:偏移量,正数表示正向偏移,负数表示负向偏移
- origin:设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
- SEEK_SET: 文件开头
- SEEK_CUR: 当前位置
- SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END对应数字依次为0,1和2.
- 返回值:成功,返回0,失败返回非0值,并设置error的值,可以用perror()函数输出错误。
- 运用
fseek(fp,100L,0); //把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1); //把fp指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2); //把fp指针退回到离文件结尾100字节处。
fprintf函数
-
头文件:stdio.h
-
原型: int fprintf (FILE* stream, const char*format, [argument])
-
作用: 根据指定的格式(format),向输出流(stream)写入数据(argument)(和printf差不多,多了第一个参数,找到文件,printf是输出东西到你的黑框框里面,这个是写到文件里面)
-
注意:fprintf( )会根据参数format 字符串来转换并格式化数据,然后将结果输出到参数stream 指定的文件中,直到出现字符串结束(’\0’)为止。
-
参数:
- stream :指向 FILE 对象的指针,该 FILE 对象标识了流。
- format : C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
- [argument]:附加参数列表
-
运用
FILE *fp;
int a = 10;
fp = fopen("abc.txt", "r+");/* 以读/写的方式打开,"abc.txt"文件 */
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
fprintf(fp, "Hello world\n"); //向文件中写入Hello world.
fprintf(fp, "%d", a); //向文件中写入a.
fclose(fp); /* 关闭文件 */
return 0;
fsanf函数
-
头文件:stdio.h
-
原型: int fscanf(FILE *stream, char *format[,argument…]);
-
作用: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。(和sanf类似不过多了第一个参数用来找文件,scanf需要我们从键盘输入,fscanf文件里面的内容相当于我们键盘输入的内容)
-
返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。
-
运用
//文件abc.txt里面是 10
FILE *fp;
int ;
fp = fopen("abc.txt", "r+");/* 以读/写的方式打开,"abc.txt"文件 */
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
fscanf(fp, "%d", &a); //从文件中读出一个整型
fclose(fp); /* 关闭文件 */
return 0;
feof函数
- 头文件:stdio.h
- 原型: int feof(FILE *stream);
- 参数: 指向 FILE 对象的指针。
- 作用: 判断是否到达文件末尾
- 返回值:如果文件结束,则返回非0值,否则返回0,
FILE *fp;
fp = fopen("abc.txt", "r");//打开文件
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
if(feof(fp)) //判断是否到达文件末尾
printf("We have reached the end of file\n");
fclose(fp);
return 0;
fgetc函数
- 头文件:stdio.h
- 原型: int fgetc(FILE *stream)
- 参数: 指向 FILE 对象的指针。
- 作用: 从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。
- 返回值:该字符对应的ascll码。如果读到文件末尾或者读取出错时返回EOF
FILE *fp;
int ch;
fp = fopen("abc.txt", "r");//打开文件
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
ch = fgetc(fp); //将第一个字符读取出来,对应ascll赋值给ch
fclose(fp);
return 0;
fputc函数
- 头文件:stdio.h
- 原型: int fputs(const char *s,FILE * stream)
- 参数:
- stream: 指向 FILE 对象的指针。
- s: 写入文件的字符
- 作用: 向文件中写入一个字符或一个字节的数据,文件内部写指针会自动后移一个字节的位置。
- 返回值:返回写入文件的字符的ASCII码值,出错时,返回EOF
FILE *fp;
int ch;
fp = fopen("abc.txt", "r");//打开文件
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
fputc(ch,fp);//将ch写入文件
fclose(fp);
return 0;
fwrite函数
- 头文件:stdio.h
- 原型: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
- 作用: 把ptr所指向的数组中的数据写入到给定流stream中。
- 参数:
- ptr: 这是指向要被写入的元素数组的指针,获取数据地址。
- size: 这是要被写入的每个元素的大小,以字节为单位。
- nmemb: 这是元素的个数,每个元素的大小为 size 字节。
- stream: 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
- 返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
int main()
{
FILE *fp;
char msg[]="this is a test";
char buf[20];
fp = fopen("abc.txt", "r+");/* 以读/写的方式打开,"abc.txt"文件 */
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
fwrite(msg,1,strlen(msg)+1,fp); //将msg写入文件fp中
fseek(fp,0,SEEK_SET);//将fp指针移动到文件开头处
fread(buf,1,strlen(msg)+1,fp);//从文件中读取出来strlen(msg)+1个字节东西,放入buf中
printf("%s\n",buf);
fclose(fp); /* 关闭文件 */
fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */
system("pause");
return 0;
}
fread函数
-
头文件:stdio.h
-
原型: size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
-
作用: 从给定输入流stream读取最多count个对象到数组buffer中(相当于对每个对象调用size次fgetc),把buffer当作unsigned char数组并顺序保存结果。(也就是从文件中读取内容)
-
注意: fread不区分文件尾和错误,因此调用者必须用feof和ferror才能判断发生了什么。
-
参数:
- buffer:
指向要读取的数组中首个对象的指针 - size
每个对象的大小(单位是字节) - count
要读取的对象个数 - stream
输入流
- buffer:
-
返回值:返回成功读取的对象个数,若出现错误或到达文件末尾,则可能小于count。
若size或count为零,则fread返回零且不进行其他动作。 -
运用
int main()
{
FILE *fp;
char msg[]="this is a test";
char buf[20];
fp = fopen("abc.txt", "r+");/* 以读/写的方式打开,"abc.txt"文件 */
if (NULL == fp) /* 打开失败 */
{
printf("错误!");
exit(1); /* 中止程序 */
}
fwrite(msg,1,strlen(msg)+1,fp); //将msg写入文件fp中
fseek(fp,0,SEEK_SET);//将fp指针移动到文件开头处
fread(buf,1,strlen(msg)+1,fp);//从文件中读取出来strlen(msg)+1个字节东西,放入buf中
printf("%s\n",buf);
fclose(fp); /* 关闭文件 */
fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */
system("pause");
return 0;
}
不够完整还请见谅,若有错误,还请指正。希望对你有所帮助,昂!!!