• ベストアンサー

C言語でコマンドラインのカレントディレクトリの移動

C言語でコマンドラインのカレントディレクトリを移動するということは可能でしょうか? ちなみに、 system("cd C:\\"); としてみても、ルートディレクトリに移動したりはしてくれませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

ひょっとして作ろうとしているプログラムは、それをコマンドプロンプトから実行すると カレントディレクトリを変更する (そして実行終了する)。といった動作をするものでしょうか? だとしたら、それはできません。

ggaogg
質問者

お礼

直接Cからはできないのですね。 遠回りな手段を考えるにしても、まずはそのような手段以外ないということがわかっていないと、めんどうくさいことは考えることができないものです。 なので、明確に「できない」というお答えがありがたかったです。 本当は、No.3の方の方法でやってみて、できたかどうか報告してから〆ようと思っていたのですが、用事もあり、遅れてすみませんでした。

その他の回答 (3)

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.4

そのプログラム実行中でいいなら、chdir()等で移動することはできますが… system()は、子プロセスでシェルを立ち上げてコマンドを実行しますが,子プロセスでのカレントディレクトリの変更が親プロセスに引き継がれるか(影響するか)は、OSによるはずです。 が、影響しないOSがほとんどと思います。 純粋なMS-DOS(PC-DOS)は影響したと思いますが、未テストです。

ggaogg
質問者

お礼

考えていただいて、ありがとうございます。

  • agricap
  • ベストアンサー率40% (79/195)
回答No.3

SendMessage 関数を使って、コマンドプロンプトにメッセージを 送り、手で「cd XXX」と入力したときと同じ状態をシミュレート してやればどうでしょう? (私もやったことがないので、本当に可能かどうか、わかりま  せん。)

ggaogg
質問者

お礼

ありがとうございます。 実は、今朝それをやってみました。 コマンドプロンプトにコマンドが表示されて、ちょっと格好わるいものの、きちんと実行されました。 この方法でいこうと思っていますが、他には、一時的なバッチファイルを作成して、それをプログラムから実行してからファイルを削除するというものも考えていましたが、これは可能かどうかはわかりません。 考えていただいてありがとうございました。

  • krisc
  • ベストアンサー率57% (12/21)
回答No.1

そのような機能の関数は標準化されていません。 Win32ならSetCurrentDirectory() POSIXならchdir()が使えますが。

ggaogg
質問者

補足

SetCurrentDirectory関数では、呼び出し元プロンプトでのディレクトリ表示はかわりませんでした。 やはりバッチファイルレベルでなければプロンプトでのディレクトリ移動は無理なのでしょうか?