ReplaceFile Windows API只是一个便利功能吗?

时间:2013-07-12 08:55:57

标签: winapi visual-c++ file-io ntfs movefileex

ReplaceFile Windows API仅仅是一个便利功能,还是它实现了超出使用MoveFileEx多次调用编码的能力?

我目前处于需要(1)编写临时文件然后(2)将此临时文件重命名为原始文件名的情况,可能会替换原始文件。

我考虑过将MoveFileExMOVEFILE_REPLACE_EXISTING一起使用(因为我不需要备份或其他任何内容),但也有ReplaceFile API,因为它在{{3 }}

这让我想到:ReplaceFile实际上做了什么特别的事,或者它只是MoveFile(Ex)的便利包装?

2 个答案:

答案 0 :(得分:8)

我认为这个问题的关键可以从文档中找到(我的重点):

  

替换文件假定替换文件的名称及其标识

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

文档说的是这样的:

  

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

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

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

答案 1 :(得分:2)

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

所以你可以“自己动手”,但为什么呢?您是否正确涵盖了所有故障情况?是的,MS可能有一个错误,但为什么要尝试发明轮子?

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

[编辑错误]