【发布时间】:2018-05-23 19:03:07
【问题描述】:
目的是查找任何新的/修改的/删除的文件。 00tobedeleted 是我在 C:\Windows\System32 中创建的文件夹。
当我通过 CMD 运行以下命令时:
dir C:\Windows\System32\00tobedeleted /s /b > E:\Database\filepaths.txt
一切正常,文件已创建,一切正常。
当我尝试在 Visual Studio 中做同样的事情时:
system("dir " + path_to_check + "/s /b > " + path_to_save + "filepaths.txt").c_str();
输出是“找不到文件”。也许是因为文件夹/文件的权限(当我扫描 C:\Windows\System32 时,一切都很好)。问题是,如何使用 Visual Studio 获取所有文件(也隐藏等)的文件路径?
path_to_check is obviously "C:\\Windows\\System32\\00tobedeleted "
and path_to_save is "E:\\Database\\"
主要:
#include "database.h"
using namespace std;
int main()
{
string path_to_check = "C:\\Windows\\System32\\00tobedeleted ", path_to_save = "E:\\Database\\", export_path = "E:\\Database\\";
Database database;
database.set_files_checksum(path_to_check, path_to_save);
}
设置校验和:
void Database::set_files_checksum(string path_to_check, string path_to_save)
{
string file;
system(("dir " + path_to_check + "/s /b > " + path_to_save + "filepaths.txt").c_str());
}
【问题讨论】:
-
首先将整个系统命令组合成一个字符串,这样您就可以看到实际传递给
system调用的内容。 -
这是我尝试的第一件事,如果有错误我不会在这里发布:)
-
还有什么是
system? ANSIsystem调用返回int,那么system(str).c_str()是什么意思? -
@Mofi:不,
system会使用系统的“由命令处理器执行”;在 Windows 上默认为CMD.EXE(在 UNIX 上默认为sh)。 -
您可以使用进程监视器查看 PC 上
File Not Found输出的原因。我想您已将代码编译为 x86 应用程序,导致访问不包含子文件夹00tobedeleted的%SystemRoot%\SysWOW64,因为您在%SystemRoot%\System32中创建了该子文件夹。请参阅 Microsoft 的 file system redirector 文档。您需要在您的 32 位应用程序中使用"C:\\Windows\\Sysnative\\00tobedeleted"来获取正确目录的文件列表。
标签: c++ windows visual-studio cmd access-rights