C++ Windows gnuplot_i.hpp не будет сохранять в другие папки

Я использовал gnuplot_i.hpp для построения большого количества данных из программы на C++. Мне нужно иметь возможность поместить выходные файлы (PNG изображения) в другие папки. Но когда я пытаюсь установить вывод для других папок, с относительными или абсолютными адресами, это терпит неудачу. Gnuplot дает мне сообщение "не могу открыть файл, вывод не изменен". Я могу положить файл в текущий каталог.

Я не знаю, является ли это чем-то глупым, например, проблемой с именем файла, или чем-то менее интуитивным, например проблемой с разрешениями. Но я заметил, что моя программа "заканчивается" до того, как gnuplot завершает работу. Я не знаю, связано ли это с ошибками, но, возможно, я бы хотел, чтобы gnuplot завершил задание A, прежде чем дать ему задание B.

Вот пример кода:

#include <iostream>
#include <string>
#include "../gnuplot_i.hpp"

int main(){
    Gnuplot g("null");
    std::cout << "Test Start" << std::endl;
    // Put file in current directory...
    std::string current_dir_string = "set terminal pngcairo enhanced\r\n"
                                     "set output \"test1.png\"\r\n"
                                     "$DATA << EOD\r\n"
                                     "1 1\r\n"
                                     "2 2\r\n"
                                     "3 3\r\n"
                                     "EOD\r\n"
                                     "plot $DATA with linespoints\r\n";
    // Put file in test directory with absolute address...
    std::string test_dir_string1 = "set terminal pngcairo enhanced\r\n"
                                   "set output \"C:\\Users\\REDACTED\\Documents\\PROGRAMMING\\Test\\testdir\\test2.png\"\r\n"
                                   "$DATA << EOD\r\n"
                                   "1 1\r\n"
                                   "2 2\r\n"
                                   "3 3\r\n"
                                   "EOD\r\n"
                                   "plot $DATA with linespoints\r\n";

    // Put file in test directory with relative address...
    std::string test_dir_string2 = "set terminal pngcairo enhanced\r\n"
                                   "set output \".\\testdir\\test3.png\"\r\n"  // ADDED THE . ACCORDING TO SoronelHaetir'S COMMENT, BUT DIDN'T UPDATE OUTPUT IMAGE.
                                   "$DATA << EOD\r\n"
                                   "1 1\r\n"
                                   "2 2\r\n"
                                   "3 3\r\n"
                                   "EOD\r\n"
                                   "plot $DATA with linespoints\r\n";
    // Put file in test directory with number in name...

    g.cmd(current_dir_string);  // THIS WORKS
    g.cmd(test_dir_string1);    // THIS FAILS
    g.cmd(test_dir_string2);    // THIS FAILS


    std::cout <<std::endl;
    std::cout << "Test Finished" << std::endl;
    return 0;
}

И вот вывод:

1 ответ

Я наткнулся на решение, немного поиграв с самим приложением gnuplot. gnuplot_i.hpp создает процесс gnuplot и отправляет весь текст процессу для печати. Но gnuplot нужно экранировать символы \ как "\\", Я думал, что делал это в моем коде выше, но gnuplot_i.hpp, должно быть, убрал escape-символы, чтобы gnuplot получил только 1 . Это заставило gnuplot интерпретировать имена файлов как неправильные коды escape-символов. После изменения моего кода на использование 4 \ символов он, похоже, работает, потому что 2 \ передается в gnuplot и имя файла интерпретируется правильно.

Другие вопросы по тегам