0

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 で実行しているためでしょうか?

4

2 に答える 2

1

\ 文字をエスケープしていません。ファイル パスには / を使用するか、必要に応じて \\ を使用する必要があります。さらに、Windows 7 では、管理者アクセスなしでハード ドライブのルート ディレクトリに書き込むことはできません。

コマンド環境が利用可能かどうかを判断するには、まず次のようにします。

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

コマンド環境が利用可能な場合は、パスを完全に指定し、上記のように \ をエスケープして、ドライブのルート ディレクトリには何も書き込まないようにする必要があります。また、ファイルを開いても、デフォルトではディレクトリが作成されないことに注意してください。

于 2012-05-15T20:32:25.810 に答える
0

いいえ、それはほとんどありません。あなたのコードにはいくつか問題があります。1 が返されるかerrnoどうかをチェックしていませんでしsystem()た。実際の問題を特定するのに役立ちます。また、バックスラッシュはすべて Esc する必要があります。

それが環境変数にdot.exeないことを示唆しています。それが失敗の理由です。PATHsystem()

于 2012-05-15T20:32:17.483 に答える