为什么CopyFile2会替换CopyFile和CopyFileEx?

时间:2012-08-28 00:24:01

标签: c++ api microsoft-metro file-copying

我最近和一位朋友谈过,他告诉我C ++ Metro应用程序中不允许使用CopyFileCopyFileEx(这似乎是正确的)。为什么是这样?为什么他们提出了一个名为CopyFile2

的奇怪替代品

所有这些都复制了一个文件,那么为什么要禁止部分已建立的API提出新的功能呢?

1 个答案:

答案 0 :(得分:5)

  1. 使用metro API的一般立场是“如果有Ex功能或某些东西取代它,你必须打电话给新的。”对于8位字符串(由于历史原因而错误命名为“ANSI编码”)版本的函数也是如此。除了其他好处之外,这还可以降低Windows RT的代码大小。

  2. 让我们分析一下CopyFile2 ...例如,options参数现在是一个大小为第一个成员的结构。我认为这对于未来的可扩展性比CopyFileEx所采用的方法更好。这允许Microsoft在保持与旧调用者的二进制兼容性的同时添加新选项。 (Microsoft可以扩展结构的长度,然后检查dwSize以确定您拥有的结构的版本,并相应地调整其行为。)仅这一点使它比CopyFileEx更具未来性证明函数签名更改(因此是一个全新的函数)来添加单个选项。 (我没有仔细阅读,也许他们已经已经在CopyFile2添加了一个选项......)