2014-05-07 15 views
2

在Windows 7那里有在下面的图片中获取文件的以前版本就像一个可能性:获取文件的以前版本中,从WINAPI

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

enter image description here

感谢先进的! =]

+2

魔术字是“影子副本”。 – Ben

回答

2

后,因此,一些搜索,并感谢@ryyker和@Ben方向我能找出答案:

例如,对于文件:C:\ SomeFolder \ SomeFile.exe

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

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

vssadmin list shadows for=C:\ 

对于编程解决方案,您可以运行它

读取并解析创建的文件。

enter image description here

这里你上面得到(“以前的版本”容器的那种)卷影副本的列表。

请参见相应的“卷影副本卷”行(你想要的版本)和追加卷名后的剩余文件路径:

\\ 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版本可能缺少对“\?\”路径的支持。

祝你好运! =]

4

这个问题列出了几个标签。所以目前还不清楚是否需要严格的c/C++方法,或者脚本等是否可行。在任何情况下...

这里有一些链接,会在正确的方向指向希望:

+0

尽管这个答案在理论上可以回答这个问题,但[更好](http://meta.stackoverflow.com/q/8259)在这里包含了答案的重要部分,并提供了供参考的链接。 – hichris123

+0

@ hichris123 - 我正在编辑,以便您在投票时发现更多相关链接。如果我解决了您的问题,请删除投票。 – ryyker

+0

这不是我的downvote - 所以我不能删除它。有一件事:我看到你已经添加了更多的链接。 *那不是我关心的*。我们希望在这里有完整的答案*,请你总结一下你给出的链接的内容。另外,我建议阅读[这篇文章](http://meta.stackexchange.com/a/8259/237685)。 – hichris123