我是Windows API的新手,我在使用dot程序(使用graphviz创建图形)从我的程序运行时遇到了很多麻烦。
我想要运行的命令,在cmd中运行的是:
dot -Kfdp -n -Tpng -o "D:\Programming\VS\Visual Studio 2013\Projects\Graphs\Graphs\Input\topsort.png" "D:\Programming\VS\Visual Studio 2013\Projects\Graphs\Graphs\Input\topsort.dot"
但是我一直收到错误2,The system cannot find the file specified
这是我的(简化)代码。请注意,处理结束时ca的值是正确的字符串,所以这不是问题。
//From earlier in the file
//#include <Windows.h>
//std::string filepath = "D:\\Programming\\VS\\Visual Studio 2013\\Projects\\Graphs\\Graphs\\Input\\topsort";
//Create structs
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo;
//Create a string and copy to a char*
string procArg = "dot -Kfdp -n -Tpng -o \"" + filepath + ".png\" \"" + filepath + ".dot\"";
char* ca = new char[procArg.size() + 1];
int size = (procArg.size() + 1) * sizeof(*ca);
int count = procArg.length();
procArg._Copy_s(ca, size, count);
ca[procArg.size()] = '\0';
//At the end of this, size = 182, count = 181,
//and ca = dot -Kfdp -n -Tpng -o "D:\Programming\VS\Visual Studio 2013\Projects\Graphs\Graphs\Input\topsort.png" "D:\Programming\VS\Visual Studio 2013\Projects\Graphs\Graphs\Input\topsort.dot"
//Attempt to create process
CreateProcess(NULL,
ca,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&StartupInfo,
&ProcessInfo);
谢谢!
答案 0 :(得分:3)
看起来系统找不到点程序的PATH。我建议您尝试将 dot 程序的绝对路径作为 procArg 的一部分。这也可以通过执行CMD来验证,然后尝试在那里执行相同的命令。
答案 1 :(得分:1)
CreateProcess有许多不同的选择。你挑选的那个可能不是最好的。选择是: