プログラム中にDOSコマンドを使うには?

解決


あっし  2006-01-12 01:11:18  No: 60261  IP: 192.*.*.*

質問です。
プログラム中に、DOSコマンドを使用して、その引数を受け取りたいのですが、
どうしたら実現できるでしょうか?

具体的には、CDを実行して、カレントディレクトリを得たいのですが。

popen等調べたのですが、unix系OSに限られる用でできませんでした。

環境は、Visual Studio .NET C++ 、Windows XP  です。
よろしくお願いします。

編集 削除
RiSK  2006-01-12 01:17:54  No: 60262  IP: 192.*.*.*

system("cd");

編集 削除
Blue  2006-01-12 01:19:50  No: 60263  IP: 192.*.*.*

> 具体的には、CDを実行して、カレントディレクトリを得たいのですが。
同様のWinAPIで代用するのはどうでしょうか?

GetCurrentDirectory 現在のプロセスのカレントディレクトリを取得します。
SetCurrentDirectory カレントディレクトリを設定します。

システム関数
MSDN ディレクトリ制御
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_directory_control.asp

> popen等調べたのですが、unix系OSに限られる用でできませんでした。
CreatProcessでDOSコマンドを起動して、CreatePipeで〜
みたいなこともできます。
(ただしめんどい)

編集 削除
あっし  2006-01-12 03:09:01  No: 60264  IP: 192.*.*.*

返信ありがとうございます。

>>RiSKさん
system関数ですと、コマンドの結果が標準出力されるので、
結果を使うことができないと思うのですけど、どうでしょうか?

>>Blueさん
なるほど、ありがとうございます。APIを使うのは考えなかったです。
勉強になります。
ですが、今後の為にプログラム内でDOSコマンドをうまく使うやり方を
知りたいと思っています。何かご存知ないでしょうか?

よろしくお願いします。

編集 削除
επιστημη  2006-01-12 05:37:24  No: 60265  IP: 192.*.*.*

popenとかはいかがでしょ。

編集 削除
Blue  2006-01-12 09:07:43  No: 60266  IP: 192.*.*.*

> 今後の為にプログラム内でDOSコマンドをうまく使うやり方
「CreatePipe CreateProcess」をキーワードにしてGoogle検索してみてください。

一時ファイルを使ってよいのならば、パイプでやるよりもやや簡単になります。

というか、
MSDN
http://www.microsoft.com/japan/developer/library/vccore/_crt__popen.2c_._wpopen.htm
に _popen 関数の説明がありますがそれは読まれましたか?
Web検索する前にMSDN(Help)を使いましょう。

編集 削除
リスク  2006-01-12 09:28:24  No: 60267  IP: 192.*.*.*

>system関数ですと、コマンドの結果が標準出力されるので、
>結果を使うことができないと思うのですけど、どうでしょうか?

つ[パイプ]

編集 削除
あっし  2006-01-12 23:50:19  No: 60268  IP: 192.*.*.*

>>επιστημηさん、Blueさん
popen関数は使えないかと思っていたのですが、_popen関数があるのですね。
MSDNで探すのすっかり忘れてました。すいません。

>>リスクさん
パイプを使うと、何かうまい方法があるかもしれないですね。
ちょっと僕は思いつかなかったですがw


余談ですが、今プログラム環境がないので、明日実際に確かめてから、
解決にチェックさせてもらいます。
みなさんありがとうございました。

編集 削除
あっし  2006-01-13 14:39:13  No: 60269  IP: 192.*.*.*

無事解決しました。ありがとうございました。

編集 削除