【发布时间】:2014-06-25 01:05:04
【问题描述】:
在 Windows 7 中,有可能获取文件的先前版本,如下图所示:
有没有办法通过代码检索文件的先前版本?因为我找不到任何 API。
感谢先进! =]
【问题讨论】:
-
神奇的词是“影子副本”。
标签: c++ c windows winapi windows-7
在 Windows 7 中,有可能获取文件的先前版本,如下图所示:
有没有办法通过代码检索文件的先前版本?因为我找不到任何 API。
感谢先进! =]
【问题讨论】:
标签: c++ c windows winapi windows-7
经过一番搜索,感谢@ryyker 和@Ben 的指示,我找到了答案:
例如文件:C:\SomeFolder\SomeFile.exe
来自 cmd(以管理员身份运行):
vssadmin list shadows for=C:\
对于编程解决方案,您可以运行它:
CreateProcessW(NULL,L"cmd.exe /c \"vssadmin list shadows for=C:\\ > C:\\someTmpFile.txt\"",...);
读取并解析创建的文件。
在上面你会得到一个卷影副本列表(一种“以前的版本”容器)。
参考相应的“Shadow Copy Volume”行(您想要的版本)并在卷名后面附加剩余的文件路径:
\\ 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 版本可能不支持“\?\”路径。
祝你好运! =]
【讨论】:
这个问题列出了几个标签。因此,尚不清楚是否需要严格的 c/c++ 方法,或者脚本等是否可以工作。无论如何……
以下是一些有望指向正确方向的链接:
【讨论】: