目的是找到任何新的/修改/删除的文件。 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());
}
答案 0 :(得分:0)
使用double /作为命令字符串。
系统函数将您的字符串转换为另一个转义序列。
因此,如果您只在字符串中发送2 \,它将在下一个字符上运行转义。
因此,如果您发送的字符串是
"dir C:\\Windows\\System32\\00tobedeleted /s /b > E:\\Database\\filepaths.txt"
这将以
的形式运行dir C:WindowsSystem3200tobedeleted /s /b > E:Databasefilepaths.txt
在cmdline上。
您需要将以下内容用于路径
C:\\\\Windows\\\\System32\\\\00tobedeleted
E:\\\\Database\\\\filepaths.txt
免责声明:我已在linux系统上测试过系统命令。不确定在Windows上是否会以相同的方式工作。
我希望这会有所帮助。
答案 1 :(得分:0)
仍在搜索解决方案,std :: filesystem对文件夹00也不起作用,此外,它也慢了。
#include <iostream>
#include <string>
#include <filesystem>
#include <fstream>
namespace fs = std::experimental::filesystem;
using namespace std;
void cmd_method(string path_to_check, string path_to_save)
{
system(("dir " + path_to_check + " /s /b > " + path_to_save + "filepaths.txt").c_str());
}
void filesystem_method(string path_to_check, string path_to_save)
{
ofstream paths_o;
string file;
paths_o.open(path_to_save+"filepaths.txt");
for (auto & p : fs::recursive_directory_iterator(path_to_check))
{
paths_o << p << endl;
}
}
int main()
{
std::string path_to_check = "C:\\Windows", path_to_save = "E:\\";
filesystem / cmd _method(path_to_check, path_to_save);
system("pause");
}
@Edit: ShellExecute也没有做到这一点
ShellExecute(0, "open", "cmd.exe", "/C dir C:\\Windows\\System32 /s /b > E:\\Database\\out.txt", 0, SW_SHOW);