C语言文件操作与相关函数介绍
1.操作的准备
c语言中的文件操作相关函数的头文件都是在#include<stdio.h>里
除此之外还得定义一个文件指针对目标文件进行指向操作,一般形式为:FILE *指针变量名;
例如:FILE *fp
2.文件的打开
对于数据的处理一般有两种存放形式:文本文件和二进制文件
想要操作文件,那肯定先得把它打开,而在C语言中一般使用fopen函数打开文件
一般形式为:fopen(文件名,文件操作形式);
该函数成功实现将返回一个文件指针,失败则返回NULL
例如:
FILE* pf = fopen("test.txt", "w");
一般为了保证文件正常打开,会进行以下测试:
if (pf == NULL) { perror("fopen"); return 1; }
3.文件的使用方式
使用文件的方式如下:
“r”(只读):为输入打开一个文本文件 对文件进行读操作
“w”(只写):为输出打开一个文本文件 对文件进行写操作
“a”(追加): 向文本文件尾添加数据
“rb”(只读): 为输入打开有一个二进制文件
“wb”(只写):为输出打开一个二进制文件对文件进行写操作
“ab”(追加): 向二进制文件尾添加数据
“r+”(读写): 为读写打开一个文本文件
“w+”(读写):为读写建立一个新的文本文件
“a+”(读写): 向文本文件尾添加数据
“rb+”(读写): 为读写打开一个二进制文件
“wb+”(读写):为读写建立一个新的二进制文件
“ab+”(读写): 为读写打开一个进制文件
4.相关的函数
4.1 fputc
从输入流缓冲区中取出下一个字符并将字符放入文本文件中
int fputc ( int character, FILE * stream );
样例:
#include<stdio.h> int main() { FILE* pf = fopen("test.txt.txt", "w"); if (pf == NULL) { perror("fopen"); return 1; } //写文件 char ch = 'a'; for (ch = 'a'; ch <= 'z'; ch++) { fputc(ch, pf); } fclose(pf); pf = NULL; return 0; }
运行结果:
4.2 fgetc
向文本文件中写出一个单个字符
int fgetc ( FILE * stream );
样例:(文本文件与fputc调用相同)
#include<stdio.h> int main() { FILE* pf = fopen("test.txt.txt", "r"); if (pf == NULL) { perror("fopen"); return 1; } //读文件 int ch = 0; while ((ch = fgetc(pf)) != EOF) { printf("%c ", ch); } fclose(pf); pf = NULL; return 0; }
运行结果:
4.3 fputs
从输入流缓冲区中取出下一个字符串并将字符放入文本文件中
int fputs ( const char * str, FILE * stream );
样例:
int main() { char arr[256] = { 0 }; FILE* pf = fopen("test.txt.txt", "w"); if (pf == NULL) { perror("fopen"); return 1; } //写文件 fputs("ssssssssssssssssss\n", pf); fputs("llllllllllllllllll\n", pf); fclose(pf); pf = NULL; return 0; }
运行结果:
4.4 fgets
向文本文件中写出一个字符串
char * fgets ( char * str, int num, FILE * stream );
样例:(文本文件与fputs调用相同)
int main() { char arr[256] = { 0 }; FILE* pf = fopen("test.txt.txt", "r"); if (pf == NULL) { perror("fopen"); return 1; } fgets(arr, 255, pf); printf("%s", arr); fgets(arr, 255, pf); printf("%s", arr); fclose(pf); pf = NULL; return 0; }
运行结果:
4.5 fprintf
格式化输出到一个流文件中
int fprintf ( FILE * stream, const char * format, ... );
样例:
struct s { char name[20]; int age; double score; }; #include<stdio.h> int main() { struct s s = { "雾都",20,98.5 }; FILE* pf = fopen("test.txt.txt", "w"); if (pf == NULL) { perror("fopen"); return 1; } //写文件 fprintf(pf, "%s %d %lf", s.name, s.age, s.score); fclose(pf); pf = NULL; return 0; }
运行结果:
4.6 fscanf
用于读取数据
int fscanf ( FILE * stream, const char * format, ... );
样例:(文本文件与fprintf调用相同)
struct s { char name[20]; int age; double score; }; #include<stdio.h> int main() { struct s s = { 0 }; FILE* pf = fopen("test.txt.txt", "r"); if (pf == NULL) { perror("fopen"); return 1; } fscanf(pf, "%s %d %lf", s.name, &(s.age), &(s.score)); printf("%s %d %lf", s.name, s.age, s.score); /*fprintf(stdout, "%s %d %lf", s.name, s.age, s.score);*/ fclose(pf); pf = NULL; return 0; }
运行结果:
4.7 fwrite
将 count 个大小为 length 的对象从名为 buffer 的数组二进制写入输入流文件名。
size_t fwrite(void *buffer, size_t length, size_t count, FILE *filename);
样例:
#include<stdio.h> struct s { char name[20]; int age; double score; }; int main() { struct s s = { "雾都",20,98.5 }; FILE* pf = fopen("test.txt.txt", "w"); if (pf == NULL) { perror("fopen"); return 1; } //二进制的写 fwrite(&s, sizeof(struct s), 2, pf); fclose(pf); return 0; }
运行结果:(因为是转成二进制了,倒也正常)
4.8 fread
二进制读取count
大小对象的数量length
从输入流filename
到名为的数组buffer
size_t fread(void *buffer, size_t length, size_t count, FILE *filename);
样例:(二进制文件与fwrite调用相同)
struct s { char name[20]; int age; double score; }; int main() { struct s s = { "雾都",20,98.5 }; FILE* pf = fopen("test.txt.txt", "r"); if (pf == NULL) { perror("fopen"); return 1; } //二进制的读 fread(&s, sizeof(struct s), 2, pf); printf("%s %d %lf", s.name, s.age, s.score); fclose(pf); return 0; }
运行结果:
到此这篇关于C语言文件操作与相关函数介绍的文章就介绍到这了,更多相关C语言文件操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论