【问题标题】:Get file's Previous Versions, from WINAPI从 WINAPI 获取文件的先前版本
【发布时间】:2014-06-25 01:05:04
【问题描述】:

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

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

感谢先进! =]

【问题讨论】:

  • 神奇的词是“影子副本”。

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


【解决方案1】:

经过一番搜索,感谢@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 版本可能不支持“\?\”路径。

祝你好运! =]

【讨论】:

    【解决方案2】:

    这个问题列出了几个标签。因此,尚不清楚是否需要严格的 c/c++ 方法,或者脚本等是否可以工作。无论如何……

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

    【讨论】:

    • 虽然这个答案理论上可以回答这个问题,it is better 在这里包括答案的基本部分,并提供参考链接。
    • @hichris123 - 当您投反对票时,我正在编辑以查找更多相关链接。如果我已经解决了您的问题,请删除反对票。
    • 这不是我的反对意见 - 所以我不能删除它。不过有一件事:我看到您添加了更多链接。 这不是我关心的问题。我们希望在这里获得完整的答案,所以您能否总结一下您提供的链接的内容?另外,我建议阅读this post
    • @hichris123 - 对于错误的假设,我深表歉意。关于您的总结请求,我们希望在这里得到完整的答案:问题本身虽然是一个有效的问题,但有些含糊。我已经为查找信息的地方提供了几个选项,每个选项都不同,考虑到问题的模棱两可,我相信这些选项以最好的方式解决了 OP 的问题。我不知道如何改进它的形式。
    • 问题是链接的 api 文档似乎没有包含任何查询文件以前快照或如何访问它们的方法。
    猜你喜欢
    • 2010-12-10
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2013-07-16
    • 2018-11-25
    • 2015-03-01
    相关资源
    最近更新 更多