如何在Visual C ++中截断文件?

我有以下情况。 我有一个大文件说1 KB。 我想读取前100个字节,然后从文件中删除100个字节的读取数据,然后读取下100个字节。 要读取100个字节是可以的,但是如何从文件中删除100个字节?

这通常是作为一个多步骤的过程来完成的:

  1. 重命名原始文件。
  2. 用原始文件名将所需数据写入新文件。
  3. 使用包含不再需要的数据的临时名称删除旧文件。

这样,如果出现问题,您可以简单地恢复您重命名的原始文件。 将文件从一个地方移动到另一个地方也是这样实现的。

但是,如果您不想这样做, SetEndOfFile函数是另一个可行的选项SetEndOfFile截断文件的内容。 从文档:

将指定文件的物理文件大小设置为文件指针的当前位置。

物理文件的大小也被称为文件的结尾。 SetEndOfFile函数可用于截断或扩展文件。

这不会被称为截断 ; 该术语是指从最后而不是从开始去除数据。 我不知道这是可能的任何操作系统,除了从第100个字节开始复制文件的内容到一个新的文件。

删除已在文件中处理的数据是耗时的,并且在大多数情况下不是必需的。

删除文件顶部或中间附近的数据需要编写一个新文件,这需要时间和磁盘空间。 大多数应用程序将读取和处理整个文件,然后重命名文件(使用备份扩展名)。 这对调试有用。 删除整个文件通常是一个更快的操作,即写入一个没有处理数据的新文件。

删除只能在必要时进行。 对于文件,可以存储有效数据开始位置的偏移,从而减少了从文件中删除数据的需要。 出于安全的目的,覆盖文件中的数据通常会更快,然后创建一个没有处理的数据的新文件。

首先尝试编写程序,不要删除文件中的数据。 只有在程序健全且正常工作后,才能根据需要删除。 很多人建议只在没有更多空间的情况下删除文件。