C语言文件读写VS2017 (tcy)
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)相关推荐
- C语言文件读写(5)-文件位置相关
C语言文件读写(5)-文件位置相关 当打开一个文件以后,无论是读还是写,都有一个指示文件位置的这么一个东西,我们可以称之为文件的位置指示器或者文件位置指针,文件位置指示器指明了当前文件读或者写的位置信 ...
- C语言文件读写(4)-判断文件是否结束
C语言文件读写-判断文件是否结束 在读文件的时候,很重要的一个条件是:文件是否结束,因为文件已经结束了,就不用继续读文件了. 判断文件结束,有许多方式,比如读取文本文件和二进制文件就可以使用不同的方式 ...
- C语言文件读写(3)-二进制文件读写操作
C语言文件读写-二进制文件读写操作 先说说什么是二进制文件,二进制文件是相对于文本文件而言的,文本文件是由一行一行的字符的有序序列组成的.二进制文件就没有行的概念了,也是由有序的字符组成的,但是在写入 ...
- C语言文件读写(2)-文本文件写操作
C语言文件读写-文本文件写操作 在上一篇中介绍了如何读取文本文件 https://blog.csdn.net/zhanghaiyang9999/article/details/107032563 这一 ...
- C语言文件读写常用函数总结
C语言文件读写常用函数总结 有点小头疼这几天复习,可是总是有些小可爱问有关C语言文件方面的内容,在此写篇博文一劳永逸. 目录 C语言文件读写常用函数总结 fopen函数 fclose函数 fseek函 ...
- C语言 文件读写 fputs 函数 - C语言零基础入门教程
目录 一.fgets 函数简介 二.fgets 函数使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fgets 函数简介 fge ...
- C语言 文件读写 fputc 函数 - C语言零基础入门教程
目录 一.fputc 函数简介 二.fputc 函数使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fputc 函数简介 fpu ...
- C语言 文件读写 fseek 函数 - C语言零基础入门教程
目录 一.fseek 函数简介 二.fseek 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fseek 函数简介 fse ...
- C语言 文件读写 EOF - C语言零基础入门教程
目录 一.EOF 简介 二.EOF 实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.EOF 简介 EOF 是 End Of Fi ...
最新文章
- 年中盘点:2021年炙手可热的10家数据科学和机器学习初创公司
- 对话百度贾磊/喻友平:深度学习正往跨领域融合高速发展
- Okhttp 使用与debug时留的大坑
- 新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例
- 如何用计算机处理频谱,如何使用PicoScope PC示波器对CD播放器的音频频谱进行分析...
- java xmpp即时通讯_基于XMPP协议即时通讯工具开发总结
- 为什么日本人晚上那么晚去居酒屋吃炸鸡喝啤酒,但街上却鲜有胖子?
- k8s使用glusterfs实现动态持久化存储
- 说明使用tc编程的一般步骤 c语言,TC编程手册详解-完整版.doc
- Java开发中学用eclipse code templates
- 拓端tecdat|R语言在地图上绘制散点饼图可视化
- 软件测试工程师的自我认识和定位!!
- 轻量android模拟器,夜神安卓模拟器6.2.0.0版:开启专业“特需”服务
- 小米科技面试题-互联网老辛整理
- 易捷行云EasyStack携新一代私有云亮相中国电子信息博览会
- 南京恩博:绿水青山的守卫者
- 前端常用属性知识点--文档
- Mac上安装MySQL图文教程(解决了临时密码和编码集问题)
- CSP 寻宝!大冒险! C++
- 登录令牌 Token 介绍