我正在尝试编译并运行4年前创建的应用程序。它是在Embarcadero RAD Studio C ++构建器中为Windows开发的。现在我尝试使用最新版本的RAD Studio在VirtualBox中编译并在Windows中运行它。我在我的应用程序中有另一个应用程序的系统调用:
system("dot.exe -Tjpg -o nfa.jpg NFA_graph.txt");
它一直返回1并且不创建文件。我也试过
system("Echo %CD% >> z:\log.txt");
并且未创建文件。我也尝试过这样:
FILE *fpipe;
char *command = "Echo %CD% >> z:\log.txt";
char line[256];
if (0 == (fpipe = (FILE*)_popen(command, "r")))
{
perror("popen() failed.");
exit(1);
}
while (fread(line, sizeof line, 1, fpipe))
{
ShowMessage(line);
}
_pclose(fpipe);
我什么都没得到。我想知道这种奇怪行为的原因是我在VirtualBox中运行这个吗?
答案 0 :(得分:1)
你没有逃脱你的\字符。您应该在文件路径中使用/,如果必须,则使用\\。此外,Windows 7不允许您写入没有管理员访问权限的硬盘驱动器的根目录。
要确定命令环境是否可用,请首先执行以下操作:
if (!system(NULL)) {
// Can't make any system() calls
}
如果您的命令环境可用,那么您需要完全指定路径,确保像我上面提到的那样逃避,并且不要在驱动器上写任何东西。根目录。另请注意,打开文件不会默认创建目录。
答案 1 :(得分:0)
不,这不太可能。我发现您的代码存在一些问题:如果errno
返回1,则不会检查system()
。它可以帮助您发现真正的问题。此外,所有反斜杠都必须为Esc'ed。
我建议dot.exe
不在PATH
环境变量中,这就是system()
失败的原因。