| |
|
开发:
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语言文件的相关操作 -> 正文阅读 |
|
[C++知识库]C语言文件的相关操作 |
目录 3.3 格式化的输入输出 fscanf()和fprintf() 前言当我们写了一个通讯录的程序时,录入的信息没办法永久保存,退出程序后信息就消失了,这是因为此刻的信息没有放入硬盘,如果想永久保存这些数据,我们就需要用到文件的知识。 一、文件初认识? ? ? ? 1.为什么使用文件?为了把数据信息记录下来,在不需要的时候可以删除,我们可以选择数据持久化,一般的方法有 把数据放在数据库、存放数据到数据库等方式。 使用文件我们可以把数据放在电脑硬盘上,做到了数据持久化。 ? ? ? ? 2.什么是文件?磁盘上的文件是文件磁盘上的文件是文件。 其实有时候我们会把信息输出到硬盘上,当需要的时候再把硬盘上的数据读到内存中使用,这里处理的就是硬盘上的文件。 ? ? ? ? 3.文件名一个文件要有一个唯一的标识符,也就是文件名,以便用户引用和使用。 文件名包括文件路径、文件名主干、文件后缀,比如c:\game\honkai.jpg。 二、文件操作1.文件的打开和关闭1.1文件指针 缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。 下面我们看看vs.2013里面stdio.h头文件的FILE是怎么定义的
当然不同的编译器实现方法可能不一样,不过不影响我们使用,每当打开一个文件,系统会自动创建一个FILE类型的结构体,我们使用的时候,可以创建一个FILE的变量,通过文件指针变量可以找到与它相关的文件。? ? ? ? ? ? ? ? ????????2.文件的打开方式ANSIC规定使用fopen打开文件,fclose关闭文件。
上面是一些打开方式,使用时记得带" ",不然会寄。 下面试着打开一个文件
这一段代码传入的文件是相对路径,即没有写文件路径,文件就会在该工程下面打开或者创建, 如果加上路径,就是绝对路径,打开会跟着路径走。
? ? ? ? 3.文件的顺序读写
3.1fgets()和fputs()函数
fgetc()每读一次指针会向后移动一位,以便下一次读到后面的字符,当读到文件末尾时,会返回EOF。 3.2fgets()和fputs()
代码操作一下
注意,"w"写的方式,在第二次打开文件进行写操作的时候,会清空之前的数据,如果想保留,可以用"a"即追加的方式打开。在用fgets()读字符时,实际读到的字符会少一个,最后一个位置会放"\0",且fgets()一次只能读文件中的一行,最后的"\n"也会读到。 3.3 格式化的输入输出 fscanf()和fprintf()
现在来使用一下
其实我们可发现,这两个函数和scanf(),printf()只有第一个参数不一样,也就是文件流,那么问题来了,为什么scanf()和printf()不需要流呢?其实不是不需要,而是输入输出里以及默认打开了。 scanf和printf是标准输入输出流,比如键盘和屏幕,而在任何一个c程序里,主要运行起来,就会默认打开三个流,stdout-标准输出流,stdin-标准输入流,stderr-标准错误流,这三个流的类型是FILE*类型的。 所以适用于所有流的函数,也可以用标准输入输出流,把文件流换成标准流就可以了。 3.4 二进制输入和输出fread函数和fwrite函数是二进制输入输出函数
?我们从参数分析一下,fwrite是把count个大小为size的数据从ptr里面写到文件流stream里面 fread是把count个大小为size的数据从stream里读到普通人里。 下面我们直接使用来看看使用效果
运行后我们可以在文件中找到相应的文本,如下 因为是二进制,所以有一些数据看不到很正常,不过用fread读取,然后打印在屏幕上就看得懂。 ?3.5 sscanf()和sprintf()函数
sprintf()函数是把格式化的数据写入某个字符缓冲区,sscanf()函数是从一个字符串之中读取指定格式的数据,废话不多说,直接开干
这两个函数和scanf()sprintf()其实是很相似的,后面两个参数都是一样的。 ????????4.文件随机读写操作4.1.fseek()函数
这个函数的功能就是重定位流上的文件指针,什么意思呢?本来文件指针默认在重文件起始位置, 但是这个函数可以改变指针起始位置。
可以根据需要,设置不同的origin参数。 4.1 ftell()函数和rewind()函数
ftell函数可以计算当前文件指针偏移量,rewind可以让文件指针回到文件起始位置。 三.文件的那些小知识? ? ? ? 1.文本文件和二进制文件根据数据的组织形式,数据文件被称为文本文件或者二进制文件。 ????????2.文件读取结束的判定2.1?被错误使用的feof 当然,不同的文件函数返回类型不同,要根据返回值去判断文件是否读取失败。 ? ? ? ? 3.文件缓冲区ANSIC?标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决走的。
?用通俗的语言来说,缓冲区的存在是为了提高效率,因为数据每写入一次硬盘,操作系统都会调用相关功能,缓冲区把数据暂时存起来,方便后面操作系统处理。 ? 总结文件的相关知识就结束了,当然还有很多知识需要以后慢慢积累。 |
|
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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 12:31:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |