你好, 欢迎回来｡
在这节课上, 我想 讨论访问文件｡
因此磁盘上的文件有一个名称和 命名文件的规则由操作系统确定｡
您可能需要调整 名称取决于程序运行的操作系统｡
如果您的程序在windows上运行 与Linux相比,
实际的目录结构也有所不同｡
所以如果你用正斜杠 或者反斜杠,
你必须在程序中调整它｡
但在大多数情况下, 名称相对具有相同的命名规则等等｡
但有可能 你得调整一下｡
程序通过 文件指针或流指针｡
因为它不仅适用于 文件,
实际上, 我们之前提到过, 但是标准 io功能可在任何设备上工作｡
所以它被称为文件指针 但实际上应该称为流指针｡
您可以将文件指针 在程序运行时以编程方式使用文件｡
所以你最终要做的就是
在程序中创建一个指针, 它的类型为file, 当你读写文件时, 它将代表文件｡
我们使用这些文件指针作为 更有效的方式来实际指向文件,
因为这个名字可能会有一点点不同｡
指针将表示 它实际上指向什么｡
您可以重用指针,
以在不同的场合指向不同的文件, 同样, 由文件名表示｡
文件指针指向结构 表示流的类型文件｡
你可以去看看 来查看文件结构中的所有内容｡
但它包含的信息
是否要读取､ 写入或更新文件, 则
存储数据的内存中缓冲区的地址, 指向文件中当前位置的指针, 以便执行下一个操作｡
我们提到的位置是 因为这是您执行写入和读取操作的地方｡
您可以将所有这些信息 通过使用输入和输出文件操作,
在结构内部创建一个新的文件｡
输入输出文件操作､ 当你打开一个文件的时候, 它实际上会指定
你想读或写的东西｡
然后你也可以改变 使用其他方法（如查找等）查找当前位置
我们将要讨论的｡
如果要使用多个文件 您必须创建一个单独的
每个文件文件指针
您只能重复使用该文件 如果您在不同的时间阅读, 请使用指针｡
打开的数量有限制 您可以在一次打开时拥有的文件｡
您可以查看 标准IO, 有一个常量定义为f
open max it all
取决于您运行操作系统
但你通常不想 并同时打开大量文件｡
写入和阅读文件是 这是一项代价高昂的操作, 因为您要在硬盘上写入数据｡
没写字快
内存, 所以这需要时间, 而且可能导致程序 反应迟钝｡
你不想有10个 文件打开并同时写入10个文件｡
若要打开文件, 这将
是你在阅读和写作之前要做的第一步｡
因此,
您希望将特定的 外部文件名, 带有通过进程的完整最终指针 称为打开文件｡
打开文件并 您可以调用一个开放函数
这将返回文件 指针,
然后您可以使用它进行阅读｡
同样, 文件指针为
指向磁盘上的特定外部文件｡
己开将要取 文件的名称｡
你要做的就是打开它 在你阅读/写之前｡
这通常是你的第一次手术｡
和大多数这些功能一样, 它们都是用标准定义的｡ h.工作人员
这里是定义 f打开调用的值｡
你会发现 value是一个文件指针, 全部大写,
文件结构｡
所以全部大写文件｡
然后您会注意到, 两个参数,
它需要一个名称和一个模式, 不用担心这个 只是更多的C11物质｡
它真的需要角色 指向名称和模式的指针｡
函数的第一个参数
是指向文件名字符串的指针, 因此 将在双引号内｡
可以显式指定名称, 也可以 请使用包含字符串地址的字符指针｡
所以这一切都是说你可以 创建一个字符串并将其分配给文本,
然后
将字符串传递给函数, 也可以在double函数中输入 在函数调用中加上引号｡
您可以获取文件名
通过命令行作为用户的输入, 或者定义 它是程序的常量｡
如果总是同一个文件
你阅读写的名字不重要, 你 可以称为常数｡
如果您的程序更灵活, 则它 可以从用户那里获得输入, 以说出您想要读取或写入的内容｡
第二个参数为f开 function是表示文件模式的字符串｡
这会指定您要执行的操作
是否要读取它, 是否要写入 是否要附加到它｡
文件模式规范被
一个用双引号括起来的字符串, 我将显示 我们最终会用很多的｡
假设调用f open 成功, 它将返回文件指针,
全部大写｡
然后你可以用这个文件 用于调用标准IO头中其他输入/输出函数的指针,
以及 我们在学习阅读和写作的时候也会学习这些
或者您也可以使用该指针来获取位置,
以更改 您在文件中的位置｡
如果无法打开文件 由于某种原因, f
open将返回null｡
这意味着在你们面前 开始执行任何阅读或写入操作时,
请确保指针未 等于null, 如果选中, 则为另一个｡
这里有文件 我提到的模式｡
请记住, 文件模式是 f open调用的第二个参数｡
这是指定您 都在双引号内｡
所以如果你做了一个w, 这意味着你想要 打开文本文件进行写入｡
如果你得了a, 那就意味着你想要 要打开文本文件进行追加,
所有写入都将写入到文件的末尾｡
如果你做r, 它就会打开 要阅读的文本文件｡
如果您将加号加到任何 如果文件不存在, 它基本上会创建该文件｡
如果你打开一个w+文件, 它将打开该文件以进行更新,
并将该文件截短为零 如果它不存在, 它可以创建一个新文件｡
和其他人在一起 要写入或读取, 文件必须存在｡
加号也一样, 它会打开 将其追加到现有文件的末尾进行更新, 或者
如果文件不存在, 请创建该文件｡
r+就会打开 更新的文本文件, 它不会创建文件
因为它将是空的｡
所以阅读只是为了 当你看到r+的时候, 你就能阅读和写｡
和其他的有点不同 加上他们实际创建的文件并不存在｡
写入模式｡
如果您要写入 名为myfile的现有文本文件｡
txt, 您将创建 文件指针, 全部大写｡
将其设置为空, 将其初始化为空｡
然后你可能会创造 您的档案当做另一个字符指标,
myfile｡ txt或者您可以 把它作为第一个参数传入, 然后输入f
open.
F打开文件名, 然后w内 双引号, 打开文件进行写入,
并返回文件指针｡
这就是为什么你有p文件 分配的左侧｡
然后要检查使 请确保p文件不等于空｡
因为如果它为null,
如果它 由于任何原因无法打开, 可能是文件名错误 或者它不存在, 那么您就无法向它写入数据｡
所以你总是想做 f检查并打印出一些信息,
如果它没有打开｡
此代码将打开文件 并将该文件与名称myfile相关联｡
文本 您文件指针fp文件
模式w意味着我们只能写 文件, 则无法读取该文件｡
如果文件名为my file 文本不存在,
则对f
open的调用将创建新的 文件名, 这是用w选项打开的f文件｡
所以当我们在前面的 如果文件不存在, w plus将创建该文件, 但它
也会将文件截断为零｡
这就是与w的不同之处｡
w将创建如果它 不存在,
但它不会将其截尾为零｡
这就是 打开文件,
在双引号内使用w｡
如果只提供文件名 没有任何路径规范,
这就是我们在 例如,
路径记住的是目录的名称｡
如果不提供 目录, 则会假设该文件位于当前目录中
无论程序在何处执行｡
如果你想真正打开
将文件复制到其他位置, 而该文件实际上并不位于 programs目录, 则必须指定整个路径｡
这叫做绝对路径｡
如果不提供路径, 通常 相对路径,
它是相对于程序运行的位置｡
因此, 您可以指定其中一个,
绝对路径或相对路径, 只需确保您知道它的位置 你做得对｡
相对路径通常更好 因为这样就不依赖了｡
如果有人搬走了 该文件并不依赖于它被移动到的位置｡
你可以做一个 相对路径,
您可以返回目录, 因此您可以使用点 这是相对于程序运行的位置而言
查了几个目录｡
当您使用绝对
路径, 它实际上是类似于c冒号的程序 文件（如果使用Windows）｡
如果该文件被移动, 程序将无法打开它
因此,
在打开文件进行写入时 文件链接将被截断为零, 位置将 在第一个操作的任何现有数据的开始处｡
任何先前 将丢失并被任何写入操作覆盖｡
所以同样没有提供 加起来就是说你不会读写｡
这是只写｡
W是唯一正确的｡
W+意味着你会读会写｡
追加模式｡
如果要添加到现有的 文本文件, 而不是覆盖它,
您可以指定一种模式｡
这要看情况｡
这会将文件定位在末尾 任何先前写入的数据｡
如果该文件不存在, 它会创建一个新的｡
这里的例子是 将第二个参数更改为带双引号的a, 它
将添加到myfile的末尾｡ 文本｡
别忘了你 每次都应该测试返回值是否为null｡
你总是想做假设 p文件不等于空｡
当您以附加模式开启档案时
数据写入操作将在数据写入结束时执行｡ 每个写入操作中的文件｡
所有写入操作都会追加 数据添加到文件中,
并且您不能更新 这种模式, 一切都在最后｡
在读取模式下, 我们可以打开 向上移动文件以读取文件｡
我们只是用r 在双引号内｡
这是只读的, 您 无法写入文件｡
如果你做了r+你会 能够读写｡
所以看起来其他的电话, 你只需执行一个f
open, 传入文件名, 然后传入双精度的r 返回文件指针的引号｡
我们还将把文件 到数据的开头｡
如果你只想读 文件, 它必须已经存在｡
你不会 读取空文件｡
所以我们没有办法 文件不存在,
它将是空的, 否则您将返回 则文件对手将为空｡
如果您尝试打开文件 阅读它不存在,
它将返回空指针｡
如果它确实存在而且是空的, 您将不会返回任何数据｡
你总是要检查 从f open返回值
再一次, 阅读 第二次, 这很重要
因为如果它是空指针 你的程序会崩溃,
它会做一些坏事｡
重新命名档案｡
现在我们知道如何打开文件｡
打开文件是第一步 操作时,
您可以指定模式和文件名｡
这样你就能拿回文件了 指针,
现在您可以用它来做其他事情｡
重命名文件 有时很重要｡
这很简单
您只需使用重命名功能｡
它需要一个旧名字和一个新名字 名称作为常量字符指针,
并返回一个int｡
返回的整数将 如果名称更改成功, 则为零,
否则为非零｡
该文件不能打开 当您调用rename时｡
否则, 它将失败 因为文件正在使用中,
所以不能重命名正在使用文件｡
所以你能做的就是 只需说rename, 传入旧文件名和新文件名｡
在本例中, 我们使用 返回windows中文件的路径｡
你知道这是 因为我看到了冒号
您还注意到, 反斜杠出现两次｡
这是因为 反斜杠是C语言中一个特殊字符｡
反斜杠n是一个行反馈｡
反斜杠r是回车符｡
所以反斜杠有特殊的 在程序中的含义｡
所以如果你想真正使用 目录中路径的反斜杠, 这是windows的作用,
您可以 必须提供其中两个｡
所以我们要把 我的文件｡ txt查找临时目录｡
我们将其重命名为my file下划线 收到｡ 尝试目录中文本
如果这不相等 对一个人来说, 它将失败｡
我们只打印出一个 显示失败的输出｡
否则, 打印输出成功｡
这将改变 myfile的名称｡ txt到我的文件副本｡
如果文件路径不正确 或者该文件不存在, 则无法重命名｡
您也可以关闭档案, 然后想要 以在每次打开文件时执行此操作｡
所以当你完成了 文件本身,
您希望告诉操作系统释放该文件｡
记住, 这是有限度的
在任何给定时间可以打开的文件数｡
您可以通过调用 f关闭函数｡
F关闭受理文件 指针作为参数｡
请记住, 文件指针 代表档案｡
它返回一个eof｡
Eof是整数｡
如果发生错误, 则返回eof｡
Eof是一个特殊字符 称为文件结束字符｡
这是标准化的定义｡ 小时 作为负整数｡
它通常等同于 到负1｡
如果关闭成功, 它将返回零｡
这样你就可以检查 eof表示不成功｡
你只要说f关关在 指针, 然后可以将指针设置为null, 并将调用
f close是指针之间的连接, p文件
并且物理文件被破坏｡
P文件不能再使用 以访问该文件以进行阅读､
写入或附加或重命名｡
如果正在写入文件, 输出缓冲区的当前内容被写入文件以
请确保数据不会丢失｡
所以你不会有任何问题
数据完整性, 如果该文件 在另一个线程中被写入｡
所以它是线程安全的｡
我们还没有讨论线程, 这是更先进的概念｡
但在这里你可以有多个 执行点｡
这是很好的编程实践 在完成文件后立即关闭文件,
就像
在完成之后释放内存是一种很好的编程实践 关闭文件时也是如此｡
它可防止输出数据丢失｡
您还必须关闭文件 在尝试重命名或删除它之前,
必须 它是关着的, 打不开｡
删除一个文件怎么样｡
您可以通过以下方式删除文件 调用删除功能｡
这也在标准中声明｡ h.工作人员
所有文件操作都是 在标准中声明｡ 我也是
你可以随时去看看这个 头文件｡
所以你只要说移除 文件的名称｡
在这里你不必 请使用文件指针｡
你可以直接说因为 不必实际打开文件即可将其删除｡
与重命名相同, 因为 您实际上并不希望打开文件, 因为
重命名, 否则删除将失败｡
它将删除文件 名称为myfile的文件｡ txt文件｡
这是提供相对路径｡
它将查找该文件 无论程序在何处执行｡
否则, 您需要 提供绝对路径｡
无法打开文件, 当您 尝试删除它, 就像重命名一样｡
你应该反复检查 具有删除文件的操作｡
你会毁了你的 系统｡
删除是一种代价非常高､ 非常复杂操作, 非常危险操作｡
删除文件可能会导致问题｡
所以要小心｡
这堂课的所有信息 与存取档案有关,
如何开启档案,
是你在阅读和写作之前需要做的事情, 也是你如何 可以删除和重命名文件, 然后在使用完文件后关闭｡
一切都是基于 提供文件指针｡
所以要理解文件指针 和它所包含的结构｡
非常有用的东西｡
标准io头包含 所有重要信息｡
接下来几节课,
我们将 来讨论阅读文本文件, 实际上添加 数据或添加或阅读它｡
-谢谢—谢谢 我希望这对你有帮助｡