Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取文件';s以前的版本,来自WINAPI_C++_C_Windows_Winapi_Windows 7 - Fatal编程技术网

C++ 获取文件';s以前的版本,来自WINAPI

C++ 获取文件';s以前的版本,来自WINAPI,c++,c,windows,winapi,windows-7,C++,C,Windows,Winapi,Windows 7,在Windows 7中,可以获取文件的早期版本,如下图所示: 有没有办法通过代码检索文件的以前版本?因为我找不到任何API 谢谢你!=] 这个问题列出了几个标签。因此,目前还不清楚是否需要严格的c/c++方法,或者脚本等是否可以工作。无论如何 以下是一些有望指向正确方向的链接: 在MSDN站点上,有参考的文档和示例代码 到 API 这里有一个 卷影复制服务 以下是如何恢复的说明 来自卷影副本的文件 将上面的API链接与 将为您提供获取特定项目信息的方法 文件、卷等 最后,这里有一个关于的链接

在Windows 7中,可以获取文件的早期版本,如下图所示:

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


谢谢你!=]

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

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

  • 在MSDN站点上,有参考的文档和示例代码 到 API
  • 这里有一个 卷影复制服务
  • 以下是如何恢复的说明 来自卷影副本的文件
  • 将上面的API链接与 将为您提供获取特定项目信息的方法 文件、卷等
  • 最后,这里有一个关于的链接,包括 有关如何“查看以前可用的列表”的信息 [a]文件夹的版本”

经过一番搜索,多亏了@Ryker和@Ben directions,我找到了答案:

例如文件:C:\SomeFolder\SomeFile.exe

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

对于编程解决方案,您可以使用以下工具运行它:

CreateProcessW(NULL,L"cmd.exe /c \"vssadmin list shadows for=C:\\ > C:\\someTmpFile.txt\"",...);
读取并解析创建的文件

在上面,您可以看到卷影副本列表(类似于“以前的版本”容器)

请参阅相应的“卷影复制卷”行(您想要的版本),并在卷名后追加剩余的文件路径:

\\ Previous version path =  \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\SomeFolder\SomeFile.exe"
wchar_t* prevPath = L"\\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy3\\SomeFolder\\SomeFile.exe";
现在,您可以使用众所周知的WIN32API函数CreateFile和ReadFile读取该文件。(从MSDN中创建和读取文件示例:)

确保使用该函数的UNICODE版本,因为ASCII版本可能不支持“\?\”路径


祝你好运!=]

神奇的词语是“影子副本”。虽然这个答案在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。@hichris123-当你投反对票时,我正在编辑以查找更多相关链接。如果我已经解决了你的问题,请删除否决票。这不是我的否决票,所以我不能删除它。不过有一件事:我看到你添加了更多的链接。那不关我的事。我们希望在这里有完整的答案,所以你能总结一下你给出的链接的内容吗?另外,我建议读一读。@hichris123-我为错误的假设道歉。关于你的总结要求,我们希望这里有完整的答案:这个问题本身,虽然是一个有效的问题,但有点模糊。我已经为查找信息的地点提供了几种选择,每一种都是不同的,鉴于问题的模糊性,我认为这是解决OP担忧的最佳方式。我不知道如何改进它的形式。问题是链接的api文档似乎没有任何方法来查询文件以前的快照,或者如何访问它们。
\\ Previous version path =  \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\SomeFolder\SomeFile.exe"
wchar_t* prevPath = L"\\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy3\\SomeFolder\\SomeFile.exe";