2016-05-23 5 views
0

で、Windowsのコマンドを実行します。私はthis topicを見つけ、system();コマンドを試してみましたが、部分的に動作します。私はこれを呼び出すことができます:は、私は、特定のツールチェーンに方向を変えると、このように一つのコマンドを実行するバッチファイルを持っているC

system("cd"); 

そして方向を戻してください。しかし、私は、このコマンドでそれを変更することはできません:これは、未知のエスケープについての警告コンパイルの原因となったので、私は脱出に\を追加し、この試みた

system("cd C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin"); 

system("cd C:\\Program Files (x86)\\Atmel\\Studio\\7.0\\toolchain\\avr8\\avr8-gnu-toolchain\\bin"); 

を私はコンパイルすることができたし、実行これは方向を変えなかった。

system()で私のコマンドを実行する可能性はありますか?方向を変えて一つのコマンドを実行したいだけなので、私はそれを単純にしたいと思っていました。

アップデート:私はその後、このトピックを見つけました:system("cd <path>") in a C program

が続いてこれで私のクエリを解決:

chdir("C:\\Program Files (x86)\\Atmel\\Studio\\7.0\\toolchain\\avr8\\avr8-gnu-toolchain\\bin"); 

system("avr-objcopy -O binary C:\\Users\\cinar\\Desktop\\ff.elf C:\\Users\\cinar\\Desktop\\ff.bin"); 
+0

、あなたの 'システム( "CD何か");' * *現在のディレクトリを変更しなかったが、system' 'によって生成されたサブシェルのための唯一のカレントディレクトリ。これは次のように機能しました:プログラムはサブシェルを生成し、サブシェルで 'cd something'コマンドを実行しました。サブシェルの現在のディレクトリが変更されました。その後、サブシェルは終了し、プログラムは実行を継続します。しかし、サブシェルの現在のディレクトリを変更すると、直後に終了したので役に立たなかった!あなたのプログラムの現在のディレクトリは変更されませんでした。 'chdir'を使うと、プログラムの現在のディレクトリを変更することができます。 (しかし、はい、CreateProcessは必要なものです) – CherryDT

+0

私は 'chdir'で私の目的を達成しました。実行ファイルを別のディレクトリに移動して失敗したかどうかを確認しましたが、うまくいきました。あなたは 'chdir'がいくつかのケースで失敗を引き起こす可能性があると思いますか?私は現在 'CreateProcess'を使用していません。 –

+0

'chdir'を使用する場合は、少なくともサブプロセスを生成した後に作業ディレクトリを元に戻す必要があります。つまり、 'CreateProcess'メソッドは' CreateProcess'関数に渡す特定の作業ディレクトリでサブプロセスを開始します。 'chdir'関数は自分のプログラムの作業ディレクトリを変更し、サブプロセス(あなたのプログラムの現在の作業ディレクトリを継承します)を生成します。しかし、あなたは自分のプログラムの現在のディレクトリを変更したので、次に相対パスで何かをするときに(例えば 'open( 'myfile。txt ') ')それは失敗する可能性があるので、古いディレクトリを保存して戻す必要があります。 – CherryDT

答えて

3

あなたのプログラムがいくつか間違った仮定を持っています。まず、"cd""dir"はプログラムではなく、シェルに組み込まれたコマンドcmd.exeです。第二に、あなたは現在のディレクトリをまったく変更する必要はないと思う。

いずれにせよ、これはWindowsシステムなので、私はCreateProcess()でプログラムを起動する方法の例を見ていきます。

現在のディレクトリを変更するには、CreateProcess()コールのlpCurrentDirectoryパラメータを確認してください。ところで

また

system("dir Users\\whatEverNextFolder > test.txt"); 
+0

次に、CreateProcessオプションを検索する必要があります。ありがとう。また、私はこの関連する質問が見つかりました:http://stackoverflow.com/questions/24722368/systemcd-path-in-a-c-program –

+1

はいCreateProcessオプションとそのスレッド内の回答もフォロー可能です –

関連する問題