Visual C++ 2013 のIDEから実行するときにコマンドライン引数/作業ディレクトリ/出力先ファイルを指定する方法
はじめに
瀬田学舎共通実習室の Windows にインストールされた Visual Studio 2013 で, プログラムをIDEから(デバッグ開始/デバッグなしで開始で)実行するときに, コマンドライン引数や作業ディレクトリを指定する方法です.
これを利用して, 標準入出力(scanf/printf)を指定のファイルにリダイレクトすることができます. 特に, 手動でcopy and pasteすることなしに, 出力をCSVファイルに保存することができます.
シンプルなやりかた
プロジェクトを選択しておいて, で,プロパティ | 値 |
---|---|
コマンド引数 | > Q:\cs2\ca1.csv |
作業ディレクトリ | $(ProjectDir) |
とします, ここでQ:\cs2\ca1.csvに実行結果(標準出力)が保存されます. つまり, Qドライブ直下のフォルダ cs2の中の ca1.csv です. これをExcelなどで開けばいいのです.
は 直下のフォルダ で, あらかじめ作っておく必要があります, すると, ファイルここでの区切り文字"\"は, 日本語変換をオフにして, 日本語キーボードの右上や右にある\キーで入力できるかも.
ca1.csvは自分で決めたファイル名です. 自分でわかる名前を好きにつけてください. .csvは, 特定の書式のテキストファイルにつける拡張子で, comma separated values の略です.
ファイル名にはスペース(空白文字)や日本語を使わないでください.
自宅の環境ではQ:ドライブがないですが, ふだんの文書ディレクトリを指定するとスペースや日本語が含まれてしまうでしょう. Q:\cs2 のかわりに専用のディレクトリ C:\cs2を作ってはどうでしょう.
このコマンドライン引数は, ソリューション名や, プロジェクト名や, ソースファイル名 *.c とは無関係で, それとは別のフォルダとファイル名です. 上でいうフォルダは, Q:\Visual Studio 2013\Projects\cs2のことではありません.
上の > は説明のためのかっこでなく, 実際に入力すべきキャラクタです. Linux の shell でリダイレクトに使う記法と同じです. 前後の空白文字はあってもなくてもいいです.
上の作業ディレクトリの設定は, (下とは違って)fopen に影響しません.
シンプルでない別のやり方
デバッグ開始/デバッグなしで実行することを考えます.
で,プロパティ | 値 |
---|---|
コマンド引数 | > rw0result1000.csv |
作業ディレクトリ | Q:\cs2 |
何が起きるの
こうすると, コマンドプロンプトからの実行で,
Q:\Visual Studio 2008\Projects>cd p000\Debug Q:\Visual Studio 2008\Projects>p000\Debug>rw0 > Q:\cs2\rw0result1000.csvとするのと同じことになります.
仕組み
作業ディレクトリとは, あらかじめそのディレクトリに移動してから(カレントディレクトリにしてから)プログラムを実行するという設定です. これを指定すれば, コマンドライン引数で指定するのがそのディレクトリの中のファイルなら, ディレクトリ部分を省略することができます. fopen で指定するファイル名にも影響します
コマンドライン引数とは, コマンドプロンプトで, プログラム名(実行ファイル名)の後ろに書く文字列です. 上は, 標準出力のリダイレクト指定の例ですが, オプションや標準入力のリダイレクト指定を書くこともできます. 例えば
rw0 -o option 1 < 標準入力ファイル名 > 標準出力ファイル名
以下未検証です
ここで大注意なのですが, このファイル名には半角スペースが含まれていてはいけません. 出力をリダイレクトできません.指定されたファイルが無効です. というエラーになります. たとえダブルクォートで囲ったとしてもだめです. また逆に半角スペースを含んでいないファイル名でも, ダブルクォートで囲むとだめです. $(ProjectDir)などのマクロを使う場合,この値に半角スペースが含まれているとやはりだめです. つまりマクロ展開後の状態で判断されます.プロジェクトのディレクトリは,Q:\Visual Studio Projects\ProjectNameがデフォルトになっていますが,この中には入出力ファイルは置けないということです. 気をつけましょう.