Loading... # C语言文件函数 ## 打开与关闭文件 **打开文件** ~~~c FILE * fopen(const char *path, const char *mode); ~~~ 返回值:成功返回一个文件指针,失败返回NULL 参数: * *path:文件路径及文件名 * *mode:打开文件方式 **关闭文件** ~~~c int fclose( FILE *fp ); ~~~ 返回值:成功返回0,失败返回EOF 参数: * *fp:需要关闭的文件指针 ## 读写文件 **读取字符** ~~~c int fgetc(FILE *fp); ~~~ 返回值:返回所读取的一个字节,若读到文件末尾时返回EOF(文件结束标识符,-1) 参数: * *fp:文件指针,读取一个字符,指针后移一个字节 **写入字符** ~~~c int fputc(char c, FILE *fp); ~~~ 返回值:字符的ASCII码值 参数: * c:要写入的字符 * *fp:文件指针,写入一个字符,文件内部写指针会自动后移一个字节 eg:循环读出字符 ~~~c FILE *fp = fopen("des_plain.txt","r"); char s; while ((s = fgetc(fp)) != EOF) { fputc(s, stdout); } fclose(fp); ~~~ **读取字符串** ~~~c char *fgets(char *buf, int bufsize, FILE *fp); ~~~ 返回值:成功返回buf,失败或读到文件末尾返回NULL(一次不能根据fgets返回值来判断是否出错,而是用feof函数) 参数: * *buf:字符型指针,存储所得数据的地址 * bufsize:整型,指明存储数据的大小=bufsize-1 * *fp:文件指针 **写入字符串** ~~~c int fputs(char *str, FILE *fp); ~~~ 返回值:成功返回0,失败返回EOF 参数: * *str:要写入的字符串 * *fp:文件指针 eg:每次读取16个字符 ~~~c FILE *fp = fopen("des_plain.txt","r"); char s[17]; while (fgets(s, 17, fp)!=NULL) { fputs(s, stdout); printf("\n"); } fclose(fp); ~~~ **写入文件** ~~~c size_t fwrite(const void* buffer, size_t size, size_t count, FILE* fp); ~~~ 返回值:返回实际写入的数据块数目 参数: * *buffer:待写入数据的内存地址 * size:要写入内容的单字节数 * count:要进行写入size字节的数据项的个数 * *fp:文件指针 **读取文件** ~~~c size_t fread ( void *buffer, size_t size, size_t count, FILE *fp) ; ~~~ 返回值:调用成功返回实际读取到的元素个数,失败或读到文件末尾返回0 参数: * *buffer:用于接收数据的内存地址 * size:要读的每个数据项的字节数,单位是字节 * count:要读取的数据项数目,每个数据项size个字节 * *fp:文件指针 eg:写入多个字符到文件并读取文件 ~~~c FILE *fp; char buffer[30] = {'a','b','c','d','e','f'}; char list[30]; fp = fopen("file.txt", "w+"); int numwrite = fwrite(buffer, sizeof(char), 6, fp); printf("%d\n", numwrite); // 写入字符数 puts(buffer); rewind(fp); // 返回文件头 int numread = fread(list, sizeof(char), 30, fp); printf("%d\n", numread); puts(list); fclose(fp); return 0; } ~~~ **格式化写入文件** ~~~c int fprintf (FILE* fp, const char* format, [argument]); ~~~ 返回值:成功返回输出的字符数,失败返回一个负值 参数: * *fp:文件指针 * *format:输出格式 * [argument]:附加参数列表 **格式化读取文件** ~~~c int fscanf(FILE* fp, constchar* format, [argument]); ~~~ 返回值:成功返回读入参数的个数,失败返回EOF 参数: * *fp:文件指针 * *format:格式化字符串 * [argument]:输入列表 eg:格式化写入和读取文件 ~~~c FILE *fp; fp = fopen("file.txt", "w+"); fprintf(fp, "%s %s %s %d", "I", "am", "Xherlock", 2022); rewind(fp); char str1[10], str2[10], str3[10]; int year; fscanf(fp, "%s %s %s %d", str1, str2, str3, &year); printf("The first string is \"%s\"\n", str1); printf("The second string is \"%s\"\n", str2); printf("The third string is \"%s\"\n", str3); printf("The first integer is %d\n", year); fclose(fp); return 0; ~~~ **重新回到文件头** ~~~c void rewind(FILE *fp); ~~~ ## 区分 **需要注意整形、浮点型数据的字节长度** fwrite和fread是读写**二进制文本** 最后修改:2022 年 04 月 15 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏