Экранирование символов в строке имени файла

#c #c 17

#c #c 17

Вопрос:

Я пытаюсь вычислить 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 resu<

   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
 

Я знаю, что мог бы написать процедуру, которая ищет все проблемные символы и заменяет их соответствующим escape, но мне было интересно, есть ли более разумный способ сделать это? Есть ли уже какая-то подобная процедура в STL? В python я могу сказать shutils, что «бла-бла-бла» — это один аргумент. Могу ли я сделать это и на c ?

Комментарии:

1. Насколько я знаю, нет в STL. Как вы относитесь к boost?

Ответ №1:

В конце я использовал регулярное выражение, чтобы добавить обратную косую черту перед каждым пробелом или скобкой. Это тоже было очень лаконично.