如果我知道要删除多少行,我如何知道文件中从哪里开始(以字节为单位)

如果我知道要删除多少行,我如何知道文件中从哪里开始(以字节为单位)

我想read()在某个位置开始创建文件。我知道要开始读取多少行 - 但 read() 不将行作为参数,它需要字节作为位置。

如果我知道从哪一行开始阅读,是否可以使用一些技巧来计算从哪个位置开始阅读?

答案1

不可能有什么诡计。跳过字节很简单,因为您可以计算文件中的开始位置。但是,如果不检查每个字符是否是换行符,就无法使用可变长度的行进行计算。

想象一本书:当你想找到第 42 页时,你甚至不用看它就可以数到第 42 页。对于明确的页面厚度,您甚至可以使用尺子来测量第 42 页的位置。但如果你想找到第五章,你需要查看所有页面才能看到新章节的开始位置。

文件没有行索引,因此即使有一些跳行实现,在表面后面除了逐字节读取来查找行之外没有其他机会,因此您也可以删除read所有行并删除您想要的行跳过。

答案2

您读取所有字节并计算字节 10 ( ) 出现的次数\n。它是nth 出现紧接在n+1行。

不幸的是,这不是一个技巧,而只是唯一可行的方法。

那里 面向记录的文件系统在某些可能允许按行直接查找的平台上(例如,在虚拟管理系统上操作系统),但是这些文件系统在您的两个平台上都不常见。 Unix 和 POSIX 将文件视为字节流,并且在此基础上本身不提供任何进一步的抽象。

相关内容