正在对文件名字符串中的字符进行转义



我正在尝试计算一个文件的sha256sum,该文件的编号为"有问题的";名称中的字符:

#include <iostream>
#include <string>
#include <filesystem>
#include <fstream>
int main(){
std::string filename = "photo i too in brasil(1).jpg";
std::string command = "sha256sum " + filename;
std::cout << command << std::endl;
std::array<char, 128> buffer;
std::string result;
FILE* pipe = popen(command.c_str(), "r");
if (!pipe)
{
std::cerr << "Couldn't start command." << std::endl;
return 0;
}
while (fgets(buffer.data(), 128, pipe) != NULL) {
result += buffer.data();
}
auto returnCode = pclose(pipe);   
}

结果是:

(base) > $ ./a.out                                                                                                                                                                                                                                                             
sha256sum photo i too in brasil(1).jpg
sh: 1: Syntax error: "(" unexpected

我知道我可以写一个例程,查找所有有问题的角色,并用相应的转义符替换它们,但我想知道是否有更聪明的方法可以做到这一点?STL中已经有这样的例程了吗?在python中,我可以告诉shutils;布拉布拉"是一个参数。我也可以在c++中这样做吗?

最后,我使用regex在每个空格或括号前添加了一个反斜杠。这也非常简洁。

最新更新