你好, 欢迎回来｡
在这堂课中, 我想谈谈 关于文件定位, 基本上是一些函数,
可以让您 若要更改文件的位置, 请执行以下操作｡
因此, 对于许多应用程序,
需要能够访问文件中的数据而不是按顺序访问｡
顺序开始 然后逐字节地向末尾移动｡
这并不总是有用的
您可能希望实际进入文件中间并获取数据, 或者 文件的结尾并抓取数据｡
这完全取决于应用程序｡
你不是总想去 从开始到结束
所以有各种各样的功能 你可以用它来随机访问数据｡
有两个方面 文件定位｡
一是找出你 另一个是移动到文件中的给定点｡
这两样东西
我想知道您在谈论文件和 文件, 它实际指向什么｡
再次说明您在文件中的位置 本身以及是否要移动到文件中的其他位置｡
因此, 您可以访问以下位置的文件： 一个随机的位置,
不管你是否打开文件, 您可以移动您文件伙伴｡
您不需要打开 要更改位置文件要更改的位置请查看您的位置｡
所以找到你在哪 我们首先要谈的
您有两个函数要查找 你现在在哪一排｡
一个叫ftel, 另一个叫 称为fgetpos, fget位置｡
对于ftell, 实际函数 定义非常简单｡
你回去吧 您可以使用文件指针｡
这个函数会接受 文件指针作为参数, 它将返回长整数
值, 指定字符在文件中的位置, 因此
我会告诉你位置｡
您可以通过创建 这里是fpos变量, 它将得到
然后传入该文件指针并调用ftel｡
f位置变量现在保持不变
文件中的当前位置, 您可以使用它返回到 在任何后续时间定位｡
所以它会把您位置恢复过来
这是你可以得到的方式 返回当前所指点的位置｡
该值是以字节为单位的偏移量 从文件的开头开始｡
所以很直接地告诉 在指针中使用传递函数,
它将返回并告诉您 基本上是从文件的开头到
从开头算起的字节数｡
在这个例子中, 我们创建了 一个文件指针fp,
我们创建一个整数length.
我们要打开文件, 而这将仅用于阅读｡
我们要让 确保它不为空｡
如果是的话, 我们就去 以传回错误｡
然后别担心找不到｡
fseek实际上只是 以转到文件的结尾｡
这是另一个帮助我们的函数｡
我只是用来 演示FTEL｡
Fseek要走到最后
然后你要说ftell fp 告诉你你基本上会在文件的末尾｡
所以返回的链接 位于文件末尾｡
所以接下来会发生的是
它将根据长度返回文件的总大小 因为你把指针移到了结尾
说我在哪里, 它说你在结尾, 所以返回结尾｡
而结束的数字是 从上次读取的字节数｡
让我们看看里面的情况 我们的代码块｡
这是我们的编码示例 在这里我们创建文件指针｡
我们将其设置为null, 使 确保它不为空｡
我们试着打开它｡
然后我们做一个fseek 会改变文件指针｡
Ftel会告诉我们 我们所指的方向｡
所以它会指向 结束,
它将是任何数量的字节到结束｡
当我们运行这个程序的时候 它显示了24个字节｡
所以这意味着你在 文件, 因为该文件是一个小文件,
仅包含24个字节｡
通常, 您将在以下命令之后使用ftel 你已经写过或阅读过一些东西
去找您搬去地方
但是调用ftel非常简单 然后len告诉你你在哪里｡
您也可以使用fget 位置或fgetpos函数｡
这是第二个功能 从而提供关于当前文件位置的信息｡
这是一个有点多 比ftel复杂｡
这将返回一个整数｡
它接受一个文件指针, 也采用f位置t型｡
所以第一个参数是 文件指针,
这样你就知道你需要读到什么文件｡
第二个参数是指向 在标准中定义的类型｡ h.工作人员
f位置t型能够 记录文件中每个位置｡
所以fget位置函数为 设计用于定位功能偏移位置时｡
所以您使用偏移位置和 那么您可以将fget position与它结合使用｡
所以fget位置函数 存储文件的当前位置和文件状态信息
和位置,
如果操作成功则返回零, 返回 非零整数值表示失败｡
因此, 您可以创建 位置类型的变量｡
这里我们说它就在这里｡
然后我们调用fget位置｡
我们在文件指针中指定, 并且 我们在f位置类型中指定｡
我们必须传入&号､ 的地址, 因为它不是指针｡
在这种情况下, 电流 文件位置位于变量hello或此处｡
所以你必须声明一个变量 类型f位置t的值, 因为这是在
参数, 您的第二个参数｡
您可以声明 类型f位置t星星, 因为将没有任何存储器
相关联以存储位置数据｡
让我们看一个例子 这样就更有意义了
在本例中, 我们创建文件 指针, 我们创建了f拥有t类型的位置,
我们调用open 然后我们调用fget位置｡
然后我们把我们的文件 指针在结束位置｡
这就是我们现在的处境 存储该位置｡
我们会得到 我们现在的位置｡
然后当我们说f put s时, 无论我们移动到哪里,
我们都在写入一些数据｡
所以, f得到位置和 ftell告诉你你想实际写入或读取的位置｡
它在中间的某个地方｡
不是在开始的时候, 不是在结尾｡
你在动｡
您通常会使用搜寻来移动 或者你用其他东西移动, 得到位置,
告诉你你在哪里｡
所以fget位置和ftell是
它会告诉你你所指的确切位置 意味着你可以搬到别的地方去, 这样你就可以阅读了｡
现在, 在 我们只是在阅读我们的进展｡
我们不会真的去读 除非我们设置了一些东西,
否则我们会执行读写操作｡
所以作为对 ftell, 您也有fseek
Fseek会允许你 换个地方来代替你的位置｡
它会传回int｡
它返回一个文件指针､ 一个长整型 偏移量和整数原始值｡
第一个参数是指针 重新定位的文件｡
第二个和第三个参数定义 文件中的位置｡
第二个参数是 第三个参数指定的参考点所在的偏移量｡
参考点可以是一个 由预定义名称指定的三个值组成｡
查找设置､ 查找当前和查找结束｡
查找集定义 文件的开头｡
Seek cur定义当前 文件中的位置, 而seek
end定义文件的结尾｡
因此对于文本模式文件, 第二个参数必须是ftel返回的值｡
所以你应该注意到fseek 和ftel, 它们一起使用｡
第三个论点是 模式文件必须设置为查找
对于文本文件, 所有操作
与fseek一起执行时, 将参考 二进制文件, 我们还没有真正了解它｡
但对于二进制文件, offset参数只是一个相对字节数｡
因此, 您可以提供
当参考值为零时, 偏移的正值或负值 指针被指定为seek cur
让我们看一个例子｡
在此示例中, 同样, 我们执行fputs｡
因此, 我们将一些数据写入 文件, 然后使用fseek｡
Fseek会把你移走的
这是说你 移动7个字节,
我们使用seek set来表示 从开头移动7个字节｡
我们可以从 文件开头的七个字节,
这将移动它｡
七个字节之后, 我们就可以 实际上是向其写入数据｡
我们也可以 使用ftell查看我们所在位置7个字节后的oh｡
您可以使用这些信息 从你现在的位置找回｡
再说一次, fseek的全部意义 而fgets是你要么看到你所在的位置来指定
您要写入或读取的位置｡
所以fseek s实际上是要 移动位置,
tell将告诉您所处的位置｡
偏移位置也类似于fseek｡
但是偏移位置是 更复杂一点｡
它将与偏移位置一致｡
所以位置偏移量也是 与偏移位置非常相似
对于偏移位置, 它 将第一个参数指定为指向打开文件的指针｡
第二个参数是 f位置t类型的指针｡
存储的位置 通过包含fget位置获得的地址｡
偏移位置有您文件 指针, 然后是实际变量｡
这里的变量之前是 由fget位置调用设置｡
同样, 您将使用 偏移和偏移结合在一起
偏移位置返回 错误时为非零值, 成功时为零｡
此功能旨在 以使用fget
position传回的值｡
所以你只能用它去一个 文件中的编号, 以在文件中获得您以前去过的位置｡
Fseek允许您前往任何 位置, 只需指定适当的偏移量即可｡
所以这里我们看起来 我们的f位置t型位置｡
我们打开文件 我们称之为fget位置｡
在fget位置, 我们指定
我们想把指针移到哪里, 我们实际上 阅读或写入文件｡
然后我们使用fputs来 不管我们把它搬到哪里｡
然后偏移位置将 再设置一个我们想写的地方
从任何我们想写地方写
有了这些功能, 你想真正看到你所指的地方｡
这将变得更容易 一旦我们有了挑战就明白了｡
所以通过阅读和写作, 你 我总是想移动到某个地方, 到达你正在写信的地方｡
你不总是想写 开始或结束｡
所以这些函数 用于将文件中任意位置移动到您想要的位置｡
谢谢你