1

I want to empty a file and i got 2 ways :

1) Using CreateFile function with dwCreationDisposition = TRUNCATE_EXISTING !

2) Opening the file ,setting the file pointer to the beginning of the file with SetFilePointerEx and then calling SetEndOfFile !

Is there any difference and which one should i use ?

4

2 回答 2

4

本质上,这两者都将实现相同的目标,并且您必须对文件进行大量“清空”才能分辨出性能上的很大差异-如果文件很大,则从文件中释放不再使用的块无论如何,分配将是主要时间。

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

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

于 2013-09-11T12:31:24.780 回答
-1

将 CreateFile 函数与dwCreationDisposition = TRUNCATE_EXISTING!

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

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

  • 打开文件并保留文件的内容。
  • 无论文件是否存在,此方法都将起作用。
    该文件是否已经存在完全留待dwCreationDisposition标记。
  • 假设您打开一个包含以下内容的文件:
    0123456789
    然后写入zxc,这就是文件现在的样子:
    zxc3456789

我坚信他们应该允许组合TRUNCATE_EXISTINGOPEN_ALWAYS更好地处理特定的情况。

于 2019-03-08T12:14:29.990 回答