| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言中文件的知识点以及fwrite fopen等的使用说明 -> 正文阅读 |
|
[C++知识库]C语言中文件的知识点以及fwrite fopen等的使用说明 |
文件理论内容: 什么是文件: ????????文件指存储在外部介质上的数据的集合。 文件的使用: (1)文件是一种保存数据的形式,存放在外部介质上的 (2)操作系统是以文件为单位对数据进行管理 (3)想找存放在外部介质上的数据,先按文件名找到所指定的文件,然后再对文件读数据 (4)要向外部介质上存储数据,也必须先建立一个文件(以文件名作为标志) 流: ? ? ? ? 流是输入输出的数据传送的过程,数据如流水一样从一处流到另一处,因此常将输入输出形象地称为流(stream),即数据流。流表示了信息从源到目的端的流动。终端键盘是输入文件,显示屏和打印机是输出文件。 ????????输入流:数据从文件(外存)流向计算机内存 ? ? ? ? 输出流:数据从计算机内存流向文件(外存),再将数据输出到.txt或者屏幕上?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 进程:正在运行的程序? ? ? ? ? ? ? ? ? ? ? ? ?? 文件的内容: ????????文件表示包括三部分: ????????????????用该路径下a文件举例D:1/2/a.txt ????????(1)文件路径D:1/2/ ????????(2)文件名主干a ????????(3)文件后缀 .txt 文件分类: ????????根据文件中数据的组织形式不同,将文件分为:文本文件和二进制文件。 ? ? ? ??二进制文件:把数据对应的二进制形式存储到文件中,是字节序列文件。将内存中的数据原封不动挪过来,因为内存中存的是二进制,所以称为二进制文件 ???????文本文件:把要存的数据当作一系列字符组成,把每个字符的ASCII码值存入文件中。每个ASCII码值占一个字节,每个字节表示一个字符,以字符形式将数据存储为 ‘1’‘0’。故文本文件也称作字符文件或ASCII文件,是字符序列文件。 ? ? eg: 出现乱码的原因: ????????编码和解码不是同一个标准。 ????????如果要求在外存上以ASCII代码形式存储,则需要在存储前进行转换为ASCII形式。 ????????字符一律ASCII形式存储,数值型数据既可以ASCII形式存储也可以二进制形式。 ????????多媒体文件包括图片文件,二进制文件包括视频文件等。 文件缓冲区:? ? ? ? ? ? ? ? ? ? ? ? ?? ????????例如:QQ想要成功登录,必须要在数据库中找到数据与输入的账号和密码匹配,但是数据库在外存中,每次都访问很麻烦,而缓冲区是内存中分配的区域,将经常输入的账户和密码存储在缓冲区中就很大程度提高访问效率。? ????????从内存向磁盘输出数据:装满后缓冲区后将数据放入到磁盘中?,并不是内存和磁盘直接交互,而是通过缓冲区。(下图中绿色箭头) ?????????刷新缓冲区的方式:\n? fflush。? ? ? ? ? ? ? 从磁盘像计算机读入数据:磁盘将数据交互到缓冲区,充满\刷新缓冲区将数据输入至程序数据区中。(下图中黄色箭头) ? ? ? ? ? ? ? ? ? ? ? ?? 文件的使用: ????????头文件:#include<stdlib.h> ????????路径: ????????????????相对路径 ? ? ? ? ? ?? ? ? ????????? ??绝对路径 ??????????????? 在字符串中,‘\’有转义字符的含义,例如想要打印”,printf(“?”?”);没办法打印,需要printf(“?\”?”); ??所以,路径的表示用“/”或者“\\ ” ????????模式决定了如何读文件:? ? ? ? ? ? ? ? ? ? ?(1)? r->只读,前提文件必须存在,不存在会报错 ? ? ? ? ? ? ? ? ?w->只写,文件可以不存在,如果存在则删除原文件,打开空文件;文件不存在,创建文件。 ? ? ? ?(2)? ?r+ ->可读可写,前提文件必须存在,不存在会报错 ????????????????? w+ ->可读可写,文件可以不存在,如果存在删除原文件,打开空文件。文件不存在,创建。 ? ? ? ? ? ? ???????a+ ->追加方式,可读可写,如果不存在会创建,存在不清楚原内容,会追加内容就是在原有内容后面续上内容。 ? ? ? ? (3)如果操作的是二进制文件,则应该在r或者w后面加一个’b’。’rb’,’wb’ ?打开文件fopen操作: ????????系统参数:文件指针FILE*,FileName是要打开文件的名字,以Mode模式打开 ????????eg: 以写的形式打开”1.txt"文件 ? ? ? ? ?????????FILE* fp = fopen("1.txt","r"); ? ? ? ? 通常将fopen函数的返回值赋给一个指向文件的指针变量。如: ??????????????????FILE* fp ?????????????????fp= fopen("1.txt","r");//fp与文件a1.txt相联系,fp指向了a1.txt文件 打开文件fclose操作: ? ? ? ??关闭文件,释放资源 ? ? ? ? 使用:fclose(pf); 写文件fwrite操作: ????????系统参数:文件返回类型size_t返回写入的个数。 ? ? ? ? ? ? ? ? ? ? ? ?fwrite(把写的东西放到buffer内,每个元素的大小,有多少个元素,文件指针-往那个文件里面写); ? ? ? ? ? ????????eg:创建可读可写fp文件命名为aaa,把哈哈哈写到fp文件内: ????????????int?main(){ ???????????????????FILE* fp = fopen("aaa.txt","w+"); ????????????????????if?(fp == NULL) { ????????????????????????printf("打开失败\n"); ????????????????????} ????????????????????char?buffer[] = "哈哈哈";//把内容存到buffer数组内 ????????????????????int?size = fwrite(buffer, sizeof(char), strlen(buffer), fp);//size保存文件返回的内容即书写内容的个数 ????????????????????printf("% d", size); ???????????????????fclose(fp); ????????????????????return?0; ? ? ? ? ? } 写文件fread操作: ???????系统参数:文件返回类型size_t返回读取成功的元素个数。 ????????????????fread(把数据读到到buffer内保存起来,每个元素的大小,读多少个元素,文件指针-往那个文件里面写); ? ? ? ? ?? ????????eg:读取文件fp并输出读取内容。 ??????????int?main(){???? ? ? ? ? ? ? ? ? char?buffer[20]; ????????????????int?main() ????????????????memset(buffer, '\0',20);//'\0'来初始化buffer的长度 ????????????????while?(fread(buffer, sizeof(char), 5, fp) > 0){ ?????????????????printf("%s\n", buffer); ????????????????memset(buffer, '\0',20);//清空内存再初始化 ??????????? ? ?} ????????} 定位文件fseek操作: ????????想要定位文件,就比如想在文件后面加上一些数据:方式一:以“a”的方式打开;方式二:进行文件定位操作。 ? ? ? ? fseek的系统参数:文件返回类型int_crdecl,一般不需要该返回值。 ????????????????fseek(定位的是哪个文件-把文件指针给上去,要偏移的字符个数(假如要在第3个字符后面插入数据就要偏移3个字符),相对位置); ????????相对偏移量: ????????????????>0 向右偏移 ????????????????<0 向左偏移 ????????相对位置:? ????????????????seek_cur ??当前 ????????????????seek_end ?末尾 ????????????????seek_set ??起始 ????????插入的内容是覆盖原来值: ????????????????eg:在123456789的内容中从头数第3个位置插入000 ????????????????fseek(fp,3,seek_set); ????????????????char buffer[]="000"; ????????????????fwrite(buffer,sizeof(char),3,fp); ????????????????结果为:123000789 统计文件大小ftell操作: ? ? ? ? ? ? ? ? 使用:long res=ftell(fp); 练习: ? 文件的拷贝:
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:17:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |