8

ReplaceFileWindows API 只是一个便利功能,还是它实现的功能超出了可以通过多次调用来编码的功能MoveFileEx

我目前处于需要的情况

  1. 写一个临时文件,然后
  2. 将此临时文件重命名为原始文件名,可能替换原始文件。

我考虑过使用MoveFileExwith MOVEFILE_REPLACE_EXISTING(因为我不需要备份或任何东西),但也有ReplaceFileAPI,因为它在Alternatives to TxF下提到。

这让我想到:ReplaceFile真的有什么特别的,还是只是一个方便的包装MoveFile(Ex)

4

2 回答 2

10

我认为关键可以在文档的这一行中找到(我的重点):

替换文件采用被替换文件的名称及其标识

使用MoveFileEx时,替换文件具有不同的标识。不保留其创建日期、不保留创建者、不保留任何 ACL 等等。使用ReplaceFile允许您使它看起来好像您打开了文件并修改了其内容。

文档是这样说的:

另一个优点是 ReplaceFile 不仅复制了新的文件数据,还保留了原始文件的以下属性:

  • 创建时间
  • 短文件名
  • 对象标识符
  • DACL
  • 安全资源属性
  • 加密
  • 压缩
  • 命名流不在替换文件中

例如,如果替换文件已加密,但替换文件未加密,则生成的文件未加密。

于 2013-07-12T10:09:44.980 回答
2

任何想要通过写入临时文件并执行重命名/重命名/删除舞蹈(正确处理所有各种故障场景)来更新文件的应用程序,每次将新的非数据属性添加到系统时都必须进行更改。他们没有强制所有应用程序进行更改,而是放入了一个应该为您执行此操作的 API。

所以你可以“自己做”,但为什么呢?你是否正确地涵盖了所有的失败场景?是的,MS 可能有错误,但为什么要发明轮子呢?

注意,我的编程模型有很多问题(最好做一个“CreateUsingTemplate”),但总比没有好。

于 2013-08-03T22:02:06.037 回答