你好, 欢迎回来｡
我们在一个新的部分｡
这一节是关于文件输入和输出写入和读取文件的全部内容｡
我们将集中讨论文本文件, 但也会讨论一些二进制文件｡
在这堂课中, 我只想提供一个概述, 告诉你什么是文件, 告诉你它如何很好地用于存储持久性数据｡
所以到目前为止, 我们的程序访问的所有数据都是通过内存访问的｡
我们对变量､ 结构等概念都很熟悉｡
清除内存中程序使用的所有数据｡
它存储在内存中的原因是因为内存的速度非常快, 你可以快速访问它来执行计算｡
您要执行获取､ 执行周期等所有操作｡
范围也是有限的, 因为我们的应用程序的范围和多样性, 如果它只使用内存,
它将受到一定的限制｡
我们知道当程序消失时, 记忆也会消失, 所以这是非常有限的｡
所有重要的业务应用程序都需要比主内存所能容纳的数据更多的数据｡
主内存也很小, 右起｡
而现在你可以得到很多内存, 1630到32千兆字节｡
但在过去, 尤其是在嵌入式设备上, 您没有那么多的RAM, 因此您的应用程序因空间和大小而非常有限｡
你只需要在主内存中存储变量和类似的东西｡
这也是因为当程序消失时, 主存储器也消失了｡
您不能让任何数据在重新启动后永久存储｡
因此, 这一切都取决于处理数据的能力, 这些数据是持久的, 并存储在外部设备,
如硬盘驱动器这些大程序｡
因此, 您需要具备在硬盘上存储数据的能力｡
它有点慢, 但是你可以在上面存储很多数据, 大程序需要存储很多数据｡
C在头文件标准中提供了许多用于向外部设备写入和从外部设备读取的函数｡
您不必编写自己的代码来读取和写入文件, 但您可以看到应用程序提供的优势,
即能够将数据存储更长的时间｡
很多优点｡
用于存储和检索数据的外部设备通常是硬盘驱动器磁盘驱动器｡
但是, 我们将要讨论的头文件函数可以在任何外部存储设备上使用｡
所以你可以在USB驱动器上使用它, 你可以在任何存储数据的外部设备和SSD驱动器上使用它,
所有的例子｡
到目前为止, 用户输入的任何数据都将丢失｡
一旦程序结束, 这就是所谓的易失性存储器｡
无论何时听到vol time memory这个术语, 它都意味着内存不是持久的, 或者数据不是持久的｡
当程序结束或机器重新启动时, 它会消失｡
所以如果用户想用相同的数据运行程序, 他每次都要重新输入, 这样数据才能恢复｡
很不方便｡
它限制了编程｡
同样, 这是易失性存储器｡
当您将内容存储在文件中并将其存储在硬盘驱动器上时, 这就是永久存储｡
它还在那里｡
即使您已重新启动计算机或程序未运行｡
这被称为非易失性存储器, 因为它停留在一个文件周围, 可以存储非易失性数据, 通常存储在磁盘上,
现在是固态驱动器和SSD｡
它是一个命名的存储区, stud标准IO是一个包含使用信息的文件,
以便能够读写这些文件｡
但我们将使用从文件中写入和读取数据的概念, 以实现永久存储,
您将注意到您的应用程序如何变得更有用､ 更健壮､ 更可扩展, 因为现在我们能够存储大量数据,
而且我们也不必担心程序结束或计算机重启时数据会丢失｡
所以使用文件是非常非常有利的｡
在Linux操作系统或Windows操作系统上, 的内部文件以某种方式存储｡
但就C语言而言, 它只是一个字节序列, 每个字节都可以单独读取｡
这与Unix中的文件结构相对应, 但并不一定｡
它只在你读文本文件和窗口的时候才有区别, 因为你可能会有额外的字符,
你必须担心大小, 但它只是一个字节序列｡
因此, 如果你有一个文本文件, 它有更多的字节, 你仍然可以读取这些字节｡
您只需要了解这些字节代表什么｡
下面是一个文件的样子, 以及我们将如何使用C编程语言读取和写入它｡
它只是一系列具有不同偏移量的字节｡
文件的开头将是零, 然后您总是可以找到文件中的不同位置｡
可能是4, 可能是4乘10, 2, 可能是100个字节｡
然后是文件结尾, 文件结尾通常用一个特殊的标记, 叫做EOF和一个文件.
所以一个文件有一个开始和一个结束和一个当前位置｡
当前位置是在开头定义了这么多字节｡
当前位置是任何文件操作将发生的位置｡
你要在这个位置上写或读｡
我们还将讨论一些函数, 你可以在文件中任意移动当前位置.
即使在结尾, 如果你想在结尾或直接读到结尾｡
有两种类型的文件｡
有文本文件和二进制文件｡
文本文件是以按行组织的字符序列形式写入的数据｡
每一行都以新的一行结束, 并且文本数据可能因系统而异, 具体取决于字符的解释方式｡
例如, 在DOS下的Windows系统中, 每一行都有一个回车符和一个换行符, 也就是一个反斜杠R和一个反斜杠N｡
所以当你读数据或写数据时, 你必须理解这一点, 因为格式有点不同｡
但是在Linux上你没有反斜杠｡
所以你必须理解文本数据是如何被写的, 即使它是按行组织的, 而且是一系列的字节,
二进制数据是以一系列字节的形式写的, 就像它们在内存中出现的那样｡
因此, 具有二进制数据的文件的示例是数据｡
我们的文件, 如图像数据或音乐编码二进制文件是不可读的｡
如果你试图在文本编辑器中显示它们, 因为它们只是字节, 我们将在这一节集中讨论文本文件,
但是你可以向文件中写入任何你喜欢的数据｡
您可以将其写为一系列字节以及它们在内存中的显示方式, 也可以写为文本｡
但是一旦文件实际被写入, 它就只会由一系列字节组成, 即使它被表示为文本｡
您可以在编辑器中查看文本文件, 这使其更易于阅读｡
你必须了解, 文件的格式, 以便阅读它, 这是我提到的, 如果你运行在DOS
Windows或Linux上, Windows可能会有额外的字符时, 它写数据.
所以一个二进制文件中的12个字节的序列可能是12个字符, 它可能是12个8乘8位的有符号整数或12个无符号整数｡
二进制火灾特别棘手, 因为他们只是存储沃森作为明显的记忆｡
因此在二进制模式下, 文件的每一位都是可访问的｡
但是, 为了从文件中读取某些内容, 您必须了解文件中的数据以及数据是如何存储的｡
这可能取决于您运行的系统｡
这也取决于它是文本还是二进制｡
溪流｡
C程序会自动以您的名义打开三个文件｡
流可以表示一个文件, 但流是一个更通用的术语, 可以表示任何类型的输入｡
它可以代表键盘, 可以代表控制台, 可以代表文件, 可以代表套接字｡
如果你习惯于网络流是一个更通用的术语, 在C编程语言中有三个流是自动为你打开的｡
一个是标准输入, 这是系统的正常输入设备｡
通常默认情况下, 它是键盘｡
我们在扫描F时一直使用标准输入, 但实际上您可以使用scan off来读取文件｡
如果你改变了输入流, 也许你把输入流改变成了一个文件标准输出, 这通常会显示在屏幕上,
通常是通过控制台｡
标准错误也在屏幕上, 但你通常必须重定向它, 以便看到它使用像&三或类似的东西｡
但这就是我提到的三个输出｡
标准输入是吉他读取的文件, 扫描, 标准输出是我们使用的输出, 打印, 我们主要使用printf｡
您还可以重定向系统上的文件, 使其被识别为标准输入输出｡
这是重定向｡
这是一个操作系统概念, 您可以在其中重定向数据, 例如将输出发送到文件, 或发送输入,
从文件中获取输入, 而不是标准的｡
您可以在此处使用小于或大于符号｡
标准错误输出的目的是提供一个逻辑上不同的位置来发送错误消息｡
因此, 即使它显示在屏幕上, 它也是一种独立的｡
要访问它, 你必须有特殊的命令｡
流是数据的任何外部源或目标的抽象表示形式｡
这就是为什么它比一个文件更通用的原因｡
键盘｡
命令行上显示磁盘上的文件｡
这些都是如何处理流的示例｡
当你开始学习C++的时候, 流会变得更加重要｡
C程式库提供读取和写入数据流的函式, 因此您可以使用相同的输入输出函式来读取和写入映射至数据流的任何外部装置｡
这就是为什么我提到你可以使用扫描F从键盘上读取｡
您也可以使用扫描F来读取档案｡
这完全取决于输入的内容, 以及流指向的位置｡
所以这些函数非常非常有用, 而且非常灵活｡
这只是对什么是文件､ 为什么要使用它､ 它如何成为持久性数据､ 它是非易失性存储器的一个高级概述｡
它会一直存在, 我们会使用它, 当我们需要为程序存储数据时,
我们会使用标准的IO头文件来读写它, 我们的程序最终会变得更健壮,
更可用, 更灵活｡
在下一讲中, 我们将讨论如何使用标准IO头中的函数来实际实现此功能｡
- 谢谢-谢谢