gnuplot — Windows C ++ 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 FAILSstd::cout <<std::endl;
std::cout << "Test Finished" << std::endl;
return 0;
}

И вот вывод:

введите описание изображения здесь

0

Решение

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]