WINAPI - 清空文件?

问题描述 投票:1回答:2

我想清空一个文件,我有两种方法:

1)使用带有dwCreationDisposition = TRUNCATE_EXISTING的CreateFile函数!

2)打开文件,使用SetFilePointerEx将文件指针设置为文件的开头,然后调用SetEndOfFile!

有什么区别,我应该使用哪一个?

c++ c file winapi
2个回答
4
投票

从本质上讲,这两者都会达到同样的效果,你必须做很多“清空”文件才能在性能上有很大差异 - 如果文件很大,则从文件中释放不再使用的块无论如何,分配将是主要的时间。

当然,如果你想要更多的可移植代码,使用ofstream of("myfile.ext");也会实现这一点,FILE *f = fopen("myfile.ext", "w");也会实现这一点(以及同一主题的一些变体)。

一般来说,这些变体之间几乎没有什么区别,它主要是对您目前正在处理的代码最有意义的情况。换句话说,“你现在要用现在的空文件做什么”,以及你可能需要什么样的“句柄”。


0
投票

从接受的答案中添加答案并未回答实际问题。

使用带有dwCreationDisposition = TRUNCATE_EXISTING的CreateFile函数!

  • 这将打开现有文件并丢弃现有内容,使文件大小为0。
  • 如果文件尚不存在,则此方法将失败。
  • 这可以理解为删除现有文件并创建一个新文件,尽管它在技术上可能不正确。

打开文件,使用SetFilePointerEx将文件指针设置为文件的开头,然后调用SetEndOfFile!

  • 打开文件并保留文件的内容。
  • 无论文件是否存在,此方法都将起作用。 该文件是否已存在完全留给dwCreationDisposition标志。
  • 我们假设你打开一个包含以下内容的文件: 0123456789 并写zxc,这是文件现在的样子: zxc3456789

我坚信他们应该允许组合TRUNCATE_EXISTINGOPEN_ALWAYS

© www.soinside.com 2019 - 2024. All rights reserved.