system関数の変数指定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
インベントリ

system関数の変数指定

#1

投稿記事 by インベントリ » 14年前

VC++2010でのsystem関数の実行についての質問です。
.exeファイルをダイアログから指定し、system(○○.exe)で実行したいと思っています。
調べながらSystem::Stringをchar*へ変換する工程を入れ、以下のようなプログラムを作成しました。

コード:

OpenFileDialog^ dlg = gcnew OpenFileDialog();
dlg -> Filter = "実行ファイル (*.exe)|*.exe";
if(dlg -> ShowDialog() != System::Windows::Forms::DialogResult::OK){
  return;
}
System::String^ strfn = dlg->FileName;
char* sysfile = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(strfn).ToPointer();
system(sysfile);
System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(sysfile));
このようにして実行したところ、内部コマンドまたは外部~が表示されました。
調べたところ、括弧内をcmd.exeに送るだけなので問題があるということがわかりました。
そこで、

コード:

system("\"C:\\test.exe\"");
このように直接指定して実行したところ成功しました。
ここからが質問なのですが、上のコード内の「C:\\test.exe」の部分を変数で指定するようにするにはどうしたらいいのでしょうか?
dlg->FileName内には「C:\test.exe」が入っているのを確認しました。
教えていただけるとうれしいです。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: system関数の変数指定

#2

投稿記事 by beatle » 14年前

Visual C++ で System::String* から char* に変換する方法
このウェブページの情報が役に立つのではないでしょうか。

YuO
記事: 947
登録日時: 15年前
住所: 東京都世田谷区

Re: system関数の変数指定

#3

投稿記事 by YuO » 14年前

インベントリ さんが書きました:ここからが質問なのですが、上のコード内の「C:\\test.exe」の部分を変数で指定するようにするにはどうしたらいいのでしょうか?
APIにはPathQuoteSpacesというものがありますが,それを呼び出すまでもなく,

コード:

String^ strfn = String::Format("\"{0}\"", dlg->FileName);
と,単純に"で囲うだけで十分でしょう。

C++/CLIなので,System::Dialognostics::Process::Startで処理すれば,C文字列への変換も,文字列を囲む処理も不要になりますが……。

インベントリ

Re: system関数の変数指定

#4

投稿記事 by インベントリ » 14年前

情報ありがとうございます。
YuO様の方法で解決しました。
System::Dialognostics::Process::Startを使うことでもっとシンプルになるということで、勉強してみたいと思います。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る