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

时间:2011-05-17 11:25:50

标签: c++ windows visual-c++ file-io truncate

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

3 个答案:

答案 0 :(得分:4)

这通常是一个多步骤的过程:

  1. 重命名原始文件。
  2. 使用原始文件名将所需数据写入新文件。
  3. 使用包含您不再需要的数据的临时名称删除旧文件。
  4. 这样,如果出现问题,您只需恢复重命名的原始文件即可。将文件从一个地方移动到另一个地方也是以这种方式实现的。


    但是,如果您不想这样做,SetEndOfFile function是另一个可行的选项,可以就地截断文件的内容。来自文档:

      

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

         

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

答案 1 :(得分:3)

那不会被称为截断;该术语是指从结束而不是从头开始删除数据。除了将文件的内容从第100个字节开始复制到新文件之外,我不知道任何可能的操作系统。

答案 2 :(得分:1)

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

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

删除应仅在必要时进行。对于文件,可以存储有效数据开始的偏移量,从而减少从文件中删除数据的需要。出于安全目的,覆盖文件中的数据通常比创建没有处理数据的新文件更快。

首先尝试编写程序,不要删除文件中的数据。只有在程序健壮且工作正常后才能根据需要删除。许多人建议只在驱动器上没有更多空间时删除文件。