C++ 系统()c++;不会在VirtualBox中运行

C++ 系统()c++;不会在VirtualBox中运行,c++,system,virtualbox,c++builder,system-calls,C++,System,Virtualbox,C++builder,System Calls,我正在尝试编译和运行这个应用程序,它是4年前创建的。它是在ActuCabro RAD Studio C++ +Builder中开发的。现在,我尝试使用最新版本的RAD Studio在Windows中的VirtualBox中编译并运行它。我对我的应用中的另一个应用进行了系统调用: system("dot.exe -Tjpg -o nfa.jpg NFA_graph.txt"); 它一直返回1,并且文件未创建。我也试过了 system("Echo %CD% >>

我正在尝试编译和运行这个应用程序,它是4年前创建的。它是在ActuCabro RAD Studio C++ +Builder中开发的。现在,我尝试使用最新版本的RAD Studio在Windows中的VirtualBox中编译并运行它。我对我的应用中的另一个应用进行了系统调用:

      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中运行这一切?

不,不太可能。我发现您的代码没有什么问题:如果
system()
返回1,您没有检查
errno
。它可以帮助你发现真正的问题。此外,所有反斜杠都必须Esc'ed


我建议
dot.exe
不在
PATH
环境变量中,这就是
system()
失败的原因。

您没有转义\character。您应该在文件路径中使用/或\\(如果必须)。此外,Windows 7不允许您在没有管理员访问权限的情况下写入硬盘驱动器的根目录

要确定命令环境是否可用,请首先执行以下操作:

if (!system(NULL)) {
    // Can't make any system() calls
}

如果您的命令环境可用,那么您需要完全指定路径,确保像我上面提到的那样转义,并且不向驱动器的根目录写入任何内容。另外请注意,打开文件不会默认创建目录。

此“z:\log.txt”应为“z:\\log.txt”。我猜您4年前使用的是Windows XP,现在使用的是Windows 7,它不允许您在没有管理员访问权限的情况下写入根文件夹。如果从命令行运行它会发生什么?我已经检查了errno,它是1。Echo%CD%>>z:\\log.txt也不起作用:^(dot.e×e在路径上。从命令提示符下,命令dot.exe-Tjpg-o nfa.jpg nfa\u graph.txt可以正常工作