ReplaceFile
Windows API仅仅是一个便利功能,还是它实现了超出使用MoveFileEx
多次调用编码的能力?我目前处于需要(1)编写临时文件然后(2)将此临时文件重命名为原始文件名的情况,可能会替换原始文件。
我考虑过将MoveFileEx
与MOVEFILE_REPLACE_EXISTING
一起使用(因为我不需要备份或其他任何内容),但也有ReplaceFile
API,因为它在{{3 }}
这让我想到:ReplaceFile
实际上做了什么特别的事,或者它只是MoveFile(Ex)
的便利包装?
答案 0 :(得分:8)
我认为这个问题的关键可以从文档中找到(我的重点):
替换文件假定替换文件的名称及其标识。
使用MoveFileEx
时,替换文件具有不同的标识。它的创建日期不会保留,创建者不会被保留,任何ACL都不会被保留等等。使用ReplaceFile
可以让您看起来好像打开了文件,并修改了其内容。
文档说的是这样的:
另一个优点是ReplaceFile不仅可以复制新文件数据,还可以保留原始文件的以下属性:
- 创作时间
- 短文件名
- 对象标识符
- 的DACL
- 安全资源属性
- 加密
- 压缩
- 未在替换文件中的命名流
例如,如果替换文件是加密的,但是 替换文件未加密,生成的文件不加密 加密。
答案 1 :(得分:2)
任何想要通过写入temp来更新文件并执行重命名/重命名/删除舞蹈(正确处理所有各种故障情况)的应用程序,每次添加新的非数据属性时都必须更改系统。他们没有强迫所有应用程序进行更改,而是提供了一个应该为您执行此操作的API。
所以你可以“自己动手”,但为什么呢?您是否正确涵盖了所有故障情况?是的,MS可能有一个错误,但为什么要尝试发明轮子?
注意,我对编程模型有很多问题(最好做一个“CreateUsingTemplate”),但它总比没有好。
[编辑错误]