从WINAPI获取文件的早期版本

时间:2014-05-07 20:53:37

标签: c++ c windows winapi windows-7

在Windows 7中,有可能获得文件的先前版本,如下图所示:

有没有办法按代码检索文件的先前版本?因为我找不到任何API。

enter image description here

谢谢高级! =]

2 个答案:

答案 0 :(得分:5)

此问题列出了几个标签。因此不清楚是否需要严格的c / c ++方法,或者脚本等是否有效。无论如何......

以下是一些希望指向正确方向的链接:

答案 1 :(得分:3)

经过一番搜索后,感谢@ryyker和@Ben的指示,我找到了答案:

例如对于file:C:\ SomeFolder \ SomeFile.exe

从cmd(以管理员身份运行):

vssadmin list shadows for=C:\

对于程序化解决方案,您可以使用以下命令运行它:

CreateProcessW(NULL,L"cmd.exe /c \"vssadmin list shadows for=C:\\ > C:\\someTmpFile.txt\"",...);

读取并解析创建的文件。

enter image description here

上面你会看到一份影子副本列表("以前版本"容器的种类)。

请参阅相应的"影子副本卷" row(您想要的版本)并在卷名后附加剩余的文件路径:

\\ Previous version path =  \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\SomeFolder\SomeFile.exe"
wchar_t* prevPath = L"\\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy3\\SomeFolder\\SomeFile.exe";

现在,您可以使用众所周知的WIN32API函数CreateFile和ReadFile来读取该文件。 (从MSDN创建和读取文件示例:EXAMPLE

确保使用该功能的UNICODE版本,因为ASCII版本可能缺乏对#34; \?\"的支持。路径。

祝你好运! =]