首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WINAPI -清空一个文件?

WINAPI -清空一个文件?
EN

Stack Overflow用户
提问于 2013-09-11 12:27:13
回答 2查看 1.5K关注 0票数 1

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

1)使用CreateFile函数和dwCreationDisposition = TRUNCATE_EXISTING!

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

有什么区别吗?我应该用哪一种?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-11 12:31:24

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

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

总的来说,这些变体之间的差别很小,这主要是关于您当前正在处理的代码中最有意义的部分。换句话说,“您接下来要对现在的空文件做什么”,以及您可能需要什么样的“处理”。

票数 4
EN

Stack Overflow用户

发布于 2019-03-08 12:14:29

使用CreateFile函数与dwCreationDisposition = TRUNCATE_EXISTING

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

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

  • 打开文件并保留文件的内容。
  • 无论文件是否存在,此方法都将工作。 该文件是否已经存在,完全由dwCreationDisposition标志决定。
  • 让我们假设您打开了一个具有以下内容的文件: 0123456789 然后编写zxc,这就是文件现在的样子: zxc3456789

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18741236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档