- ベストアンサー
C言語でコマンドラインのカレントディレクトリの移動
C言語でコマンドラインのカレントディレクトリを移動するということは可能でしょうか? ちなみに、 system("cd C:\\"); としてみても、ルートディレクトリに移動したりはしてくれませんでした。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ひょっとして作ろうとしているプログラムは、それをコマンドプロンプトから実行すると カレントディレクトリを変更する (そして実行終了する)。といった動作をするものでしょうか? だとしたら、それはできません。
その他の回答 (3)
- gatyan
- ベストアンサー率41% (160/385)
そのプログラム実行中でいいなら、chdir()等で移動することはできますが… system()は、子プロセスでシェルを立ち上げてコマンドを実行しますが,子プロセスでのカレントディレクトリの変更が親プロセスに引き継がれるか(影響するか)は、OSによるはずです。 が、影響しないOSがほとんどと思います。 純粋なMS-DOS(PC-DOS)は影響したと思いますが、未テストです。
お礼
考えていただいて、ありがとうございます。
- agricap
- ベストアンサー率40% (79/195)
SendMessage 関数を使って、コマンドプロンプトにメッセージを 送り、手で「cd XXX」と入力したときと同じ状態をシミュレート してやればどうでしょう? (私もやったことがないので、本当に可能かどうか、わかりま せん。)
お礼
ありがとうございます。 実は、今朝それをやってみました。 コマンドプロンプトにコマンドが表示されて、ちょっと格好わるいものの、きちんと実行されました。 この方法でいこうと思っていますが、他には、一時的なバッチファイルを作成して、それをプログラムから実行してからファイルを削除するというものも考えていましたが、これは可能かどうかはわかりません。 考えていただいてありがとうございました。
- krisc
- ベストアンサー率57% (12/21)
そのような機能の関数は標準化されていません。 Win32ならSetCurrentDirectory() POSIXならchdir()が使えますが。
補足
SetCurrentDirectory関数では、呼び出し元プロンプトでのディレクトリ表示はかわりませんでした。 やはりバッチファイルレベルでなければプロンプトでのディレクトリ移動は無理なのでしょうか?
お礼
直接Cからはできないのですね。 遠回りな手段を考えるにしても、まずはそのような手段以外ないということがわかっていないと、めんどうくさいことは考えることができないものです。 なので、明確に「できない」というお答えがありがたかったです。 本当は、No.3の方の方法でやってみて、できたかどうか報告してから〆ようと思っていたのですが、用事もあり、遅れてすみませんでした。