1.1.函数

函数 说明
打开关闭文件: 代码首行写:#define _CRT_SECURE_NO_WARNINGS
FILE *fopen(const char *filename, const char *mode)     注1 打开文件-函数失败返回NULL
errno_t fopen_s( FILE** pFile, const char *filename, const char *mode ) 打开文件-成功返回零错误返回非0(2)
int fclose(FILE *fp);                                 关闭文件清空缓冲区:成功返回零错误返回EOF(-1)
文本文件读写:  
int fgetc(FILE *fp);     读1字符:成功返回读到字符,读到文件尾或失败返回EOF
int fputc(int c, FILE *steam);    写1字符:成功返回写入字符,失败返回EOF
char *fgets(char *buf, int n, FILE *fp); 最多读一行遇'\n'或EOF结束 读n-1个str到buf:尾加'\0';成功返回buf首地址失败NULL;
int fputs(char *str, FILE *fp);  写字符串:成功返回非负数,失败返回EOF
int fscanf_s(FILE *fp,const char *format,...)     fscanf_s(fp,"%s",arr,80); 读取str:遇空格,换行符停止; fscanf_s(fp,"%d",&var);
int fprintf_s(FILE *fp,const char *format,...)    fprintf_s(fp, "%s\n", arr[i]); 写入str:成功返回写入字符个数,失败返回负数
二进制读写: 用于存储块的读写 - 通常是数组或结构体
size_t fread(void *buf, size_t size, size_t count, FILE *fp);   读取块数据(,字符,str,多行数据)存buf;返回成功读写块数count
size_t fwrite(void *buf, size_t size, size_t count, FILE *fp)  注2 写入块数据;返回成功读写块数count 
参数:  
ptr : 内存区块指针(数组、变量、结构体)用来存放或写数据;  
size/count: 数据块字节数/数据块数量  
文件定位函数:  
void rewind(FILE *fp);      将位置指针移动到文件开头
int fseek(FILE *fp, long offset, int origin);                        注3 将位置指针移动到origin+offset的位置:成功返回0失败非0
参数:  
offset偏移量字节数;正后移负前移;  
origin 起始位置 :SEEK_SET/SEEK_CUR/SEEK_END(0/1/2)文件开头/现行位置/文件末尾;  
文件检测函数:  
long ftell(FILE *stream); 返回文件位置指示器当前值;- 1错误
int feof(FILE *stream);    文件结束检测: 尾部返回1否则返回0;while (!feof(fp)) ; fgetc(fp);
文件缓冲区:  
int fflush(FILE *stream); 输出缓冲区内容写文件, 输入缓冲区内容清除
错误处理:  
int ferror(FILE *fp);         文件出错检测:返回0未出错否则有错
void clearerr(FILE *fp);   清除出错标志和文件结束标志,使它们为0值
注1:fopen参数 "r"/ "r+" / "rb+"  只读/读写/二进制读写-方式打开文件 "w"/ "w+" / "wb+"  只写/读写/二进制读写-不存在创建;存在清空"a"/ "a+" / "ab+"  追加/读写/二进制读写-不存在创建;存在数据追加到文件末尾注2:返回值:如返回值 < count:对fwrite()肯定发生错误用ferror()检测;对fread()可能读到文件末尾或错误,用ferror()或feof()检测
注3: 仅 r+ 模式打开文件才能插入内容,w , w+ 会清空内容再来写,a , a+ 总在文件尾添加内容,哪怕用 fseek() 移动了文件指针位置

1.2.非标准文件函数io.h

函数 说明
int open(char *filename, int access);   打开文件;返回值为文件描述字(非负值)否则-1
int close(int handle);                                 关闭文件描述字handle相连的文件
int read(int handle, void *buf, int count); 读count字节到buf;返回实际所读字节数, 返回-1/0=出错/文件结束
int write(int handle, void *buf, int count);         写count字节到文件;返回实际写入字节数
int lseek(int handle, long offset, int fromwhere); 文件位置指针进行定位
long tell(int handle);                                       返回文件现生位置
参数:access = :基本模式(1个)和修饰符(多个), 两者用" "("或")方式连接。 基本模式         含义    修饰符           含  义 O_RDONLY    只读     _APPEND    文件指针指向末尾 O_WRONLY   只写     _CREAT      文件不存在时创建文件, 属性按基本模式属性 O_RDWR        读写    _TRUNC      若文件存在将其长度缩为0, 属性不变 O_BINARY      打开一个二进制文件 O_TEXT          打开一个文字文件

2.实例

实例1.1:文本文件写#include <stdio.h> #include <stdlib.h>#include <string.h>//文本文件写:errno_t writeText(char *text, const char *file,const char *mode="w+"){size_t n = strlen(text);if (n == 0) return -1;FILE *fp = NULL;errno_t err = fopen_s(&fp, file,mode); //打开文件if (err) return err;//1.1.方式1:字符写文件fputcfor (size_t i = 0; i < n; i++)fputc(text[i], fp);                //1.2.方式2:字符串写文件fputsfputs("......\n", fp);                 fputs(text, fp);//1.3.方式3:字符串写文件fprintffprintf(fp, "......\n");               fprintf(fp, text);err = fclose(fp);                                   //关闭文件return err;}
实例1.2:文本文件读:errno_t readText(const char *file, const char *mode = "r"){FILE *fp = NULL;errno_t err = fopen_s(&fp, file,mode);if (fp == NULL){puts("Fail to open file!"); exit(-1);}  clearerr(fp);                                         //清除错误//1.1.方式1:每次读取一个字符fgetcint c = 0;printf("-%ld ", ftell(fp));                        //打印当前文件指针位置while ((c = fgetc(fp)) != EOF)            //每次读取一个字节,直到读取完毕{printf("-%ld ", ftell(fp));printf("%c", c);}//1.2.方式2:读取文件一行fgetsrewind(fp);                                           //重新定位到文件开头char str[255];while (fgets(str, 255, fp) != NULL)      //循环读取文件每行数据 printf("%s", str);//1.3.方式3:读取文件一行fscanf_srewind(fp);                                           //重新定位到文件开头while (feof(fp) != 1)                             //循环读取文件每行数据 {fscanf_s(fp, "%s", str, 255);           //后边遇到空格则结束;如This is a book.\n读取到Thisprintf("%s", str);                              //结果单词去除全部空白符 Thisisa...}if (ferror(fp))puts("读取出错");elseputs("读取成功");err = fclose(fp);                                  //关闭文件 不存在文件=2,存在文件=0return err;}
 int main() {char buff[255] = "This is a book.\nMy name is Tom.\nI come from in China.\r\n";writeText(buff, "test.txt");readText("test.txt");}//显示结果:-0 -1 T-2 h-3 i-4 s-5  -6 i-7 s-8  -9 a-10  -11 b-12 o-13 o-14 k-15 .-17-18 M-19 y-20  -21 n-22 a-23 m-24 e-25  -26 i-27 s-28  -29 T-30 o-31 m-32 .-34-58 I-36  -37 c-38 o-39 m-40 e-41  -42 f-43 r-44 o-45 m-46  -47 i-48 n-49  -50 C-51 h-52 i-53 n-54 a-55 .-56-59 .-60 .-61 .-62 .-63 .-64 .-66-67 T-68 h-69 i-70 s-71  -72 i-73 s-74  -75 a-76  -77 b-78 o-79 o-80 k-81 .-83-84 M-85 y-86  -87 n-88 a-89 m-90 e-91  -92 i-93 s-94  -95 T-96 o-97 m-98 .-100-101 I-102  -103 c-104 o-105 m-106 e-107  -108 f-109 r-110 o-111 m-112  -113 i-114 n-115  -116 C-117 h-118 i-119 n-120 a-124 .-122-125 .-126 .-127 .-128 .-129 .-130 .-132-133 T-134 h-135 i-136 s-137  -138 i-139 s-140  -141 a-142  -143 b-144 o-145 o-146 k-147 .-149-150 M-151 y-152  -153 n-154 a-155 m-156 e-157  -158 i-159 s-160  -161 T-162 o-163 m-164 .-166-167 I-168  -169 c-170 o-171 m-172 e-173  -174 f-175 r-176 o-177 m-178  -179 i-180 n-181  -182 C-183 h-184 i-185 n-186 a-190 .-188This is a book.My name is Tom.I come from in China.......This is a book.My name is Tom.I come from in China.......This is a book.My name is Tom.I come from in China.Thisisabook.MynameisTom.IcomefrominChina.......Thisisabook.MynameisTom.IcomefrominChina.......Thisisabook.MynameisTom.IcomefrominChina.China.读取成功
实例1.3:文件的随机读写void readWriteText(){FILE *fp = NULL;errno_t err = fopen_s(&fp,"test.txt", "w+"); fprintf_s(fp, "This is testing for fprintf...\n");fseek(fp, 10, SEEK_SET);if (fputc(65, fp) == EOF) { printf("fputc fail"); } //This is teAhis is testing for fprintf...char buf[255];fseek(fp, 10, SEEK_SET);fgets(buf,255, fp);printf("%s\n", buf);                                           //Ahis is testing for fprintf...fclose(fp);}
实例2:二进制文件读写实例2.1:数组写入文件:void writeBinary(){const int N = 3; FILE *fp = NULL;int arr[N] = { 1,2,3 }, result[N] = { 0 }, err = 0;if ((err = fopen_s(&fp, "D:\\demo.txt", "rb+")) != 0)return ;fwrite(arr, sizeof(int), N, fp);                             //数组arr内容写文件rewind(fp);                                                        //将文件位置指针重定位到文件头fread(result, sizeof(int), N, fp);                         //从文件读取内容并保存到数组resultfor (int i = 0; i < N; i++)printf("%d,", result[i]);                                   //1,2,3,fclose(fp);}
实例2.2:结构体数组写入文件:fread,fwrite #define N 3typedef struct Boy{char name[10];int age;}Boy;void writeBinary(){//结构体数组写入文件:FILE *fp; int err = 0;Boy boy[] = { { "Tom",22 },{ "Bob",33 },{ "Jim",44 } };Boy _boy[N] = { 0 }, b = { 0 };if ((err = fopen_s(&fp, "d:\\demo.txt", "wb+")) != 0)return;fwrite(&boy, sizeof(Boy), N, fp);                        //数组写入文件 或(Boy*)boyrewind(fp);                                                         //将文件指针重置到文件开头fread((Boy*)_boy, sizeof(Boy), N, fp);               //从文件读取数据for (int i = 0; i < N; i++)                                      //输出数组 boyb 中的数据printf("%s,%d \n", _boy[i].name, _boy[i].age);//Tom, 22//Bob, 33//Jim, 44fseek(fp, sizeof(Boy), SEEK_SET);                //移动位置指针 fread(&b, sizeof(Boy), 1, fp);                           //读取一条学生信息 printf("%s,%d \n", b.name, b.age);                  //Bob, 33fclose(fp);}
实例2.3:结构体数组写入文件:fscanf,fprintfvoid writeBinary(){FILE *fp; int err=0;Boy _boy[3];Boy boy[] = { { "Tom",22 },{ "Bob",33 },{ "Jim",44 } };if ((err = fopen_s(&fp,"D:\\demo.txt", "wt+")) != 0) return;for (int i = 0; i < N; i++)fprintf_s(fp, "%s %d\n", boy[i].name,boy[i].age); //%s %d之间加逗号存在问题rewind(fp);                                                               //重置文件指针for (int i = 0; i < N; i++)                                            //从文件中读取数据fscanf_s(fp, "%s %d\n", _boy[i].name,10, &_boy[i].age);for (int i = 0; i < N; i++)printf("%s %d\n", _boy[i].name, _boy[i].age);fclose(fp);   }

C语言文件读写VS2017 (tcy)相关推荐

  1. C语言文件读写(5)-文件位置相关

    C语言文件读写(5)-文件位置相关 当打开一个文件以后,无论是读还是写,都有一个指示文件位置的这么一个东西,我们可以称之为文件的位置指示器或者文件位置指针,文件位置指示器指明了当前文件读或者写的位置信 ...

  2. C语言文件读写(4)-判断文件是否结束

    C语言文件读写-判断文件是否结束 在读文件的时候,很重要的一个条件是:文件是否结束,因为文件已经结束了,就不用继续读文件了. 判断文件结束,有许多方式,比如读取文本文件和二进制文件就可以使用不同的方式 ...

  3. C语言文件读写(3)-二进制文件读写操作

    C语言文件读写-二进制文件读写操作 先说说什么是二进制文件,二进制文件是相对于文本文件而言的,文本文件是由一行一行的字符的有序序列组成的.二进制文件就没有行的概念了,也是由有序的字符组成的,但是在写入 ...

  4. C语言文件读写(2)-文本文件写操作

    C语言文件读写-文本文件写操作 在上一篇中介绍了如何读取文本文件 https://blog.csdn.net/zhanghaiyang9999/article/details/107032563 这一 ...

  5. C语言文件读写常用函数总结

    C语言文件读写常用函数总结 有点小头疼这几天复习,可是总是有些小可爱问有关C语言文件方面的内容,在此写篇博文一劳永逸. 目录 C语言文件读写常用函数总结 fopen函数 fclose函数 fseek函 ...

  6. C语言 文件读写 fputs 函数 - C语言零基础入门教程

    目录 一.fgets 函数简介 二.fgets 函数使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fgets 函数简介 fge ...

  7. C语言 文件读写 fputc 函数 - C语言零基础入门教程

    目录 一.fputc 函数简介 二.fputc 函数使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fputc 函数简介 fpu ...

  8. C语言 文件读写 fseek 函数 - C语言零基础入门教程

    目录 一.fseek 函数简介 二.fseek 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fseek 函数简介 fse ...

  9. C语言 文件读写 EOF - C语言零基础入门教程

    目录 一.EOF 简介 二.EOF 实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.EOF 简介 EOF 是 End Of Fi ...

最新文章

  1. 年中盘点:2021年炙手可热的10家数据科学和机器学习初创公司
  2. 对话百度贾磊/喻友平:深度学习正往跨领域融合高速发展
  3. Okhttp 使用与debug时留的大坑
  4. 新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例
  5. 如何用计算机处理频谱,如何使用PicoScope PC示波器对CD播放器的音频频谱进行分析...
  6. java xmpp即时通讯_基于XMPP协议即时通讯工具开发总结
  7. 为什么日本人晚上那么晚去居酒屋吃炸鸡喝啤酒,但街上却鲜有胖子?
  8. k8s使用glusterfs实现动态持久化存储
  9. 说明使用tc编程的一般步骤 c语言,TC编程手册详解-完整版.doc
  10. Java开发中学用eclipse code templates
  11. 拓端tecdat|R语言在地图上绘制散点饼图可视化
  12. 软件测试工程师的自我认识和定位!!
  13. 轻量android模拟器,夜神安卓模拟器6.2.0.0版:开启专业“特需”服务
  14. 小米科技面试题-互联网老辛整理
  15. 易捷行云EasyStack携新一代私有云亮相中国电子信息博览会
  16. 南京恩博:绿水青山的守卫者
  17. 前端常用属性知识点--文档
  18. Mac上安装MySQL图文教程(解决了临时密码和编码集问题)
  19. CSP 寻宝!大冒险! C++
  20. 登录令牌 Token 介绍

热门文章

  1. mysql后一项减去前一项_sql语句优化及后一条减前一条
  2. cdh集群搭建(6.3)
  3. MacOS内存硬盘APFS RAMDisk加速Chrome缓存
  4. martini-md参数(mdp文件)
  5. word文本框和形状如何取消自动对齐?
  6. Java中的函数式接口
  7. JUST技术:面向时空数据场景的SQL优化器
  8. macos多合一系统安装u盘制作器_重装系统——制作U盘启动盘
  9. Linux下ELF格式可执行文件及动态链接相关部分的解析
  10. 写给所有的IT民工们