Visual C++ 2013 のIDEから実行するときにコマンドライン引数/作業ディレクトリ/出力先ファイルを指定する方法

Time-stamp: "2017-04-19 Wed 17:37 JST hig"

はじめに

瀬田学舎共通実習室の Windows にインストールされた Visual Studio 2013 で, プログラムをIDEから(デバッグ開始/デバッグなしで開始で)実行するときに, コマンドライン引数や作業ディレクトリを指定する方法です.

これを利用して, 標準入出力(scanf/printf)を指定のファイルにリダイレクトすることができます. 特に, 手動でcopy and pasteすることなしに, 出力をCSVファイルに保存することができます.

シンプルなやりかた

プロジェクトを選択しておいて, プロジェクト > (プロジェクト名の)プロパティ > 構成プロパティ>デバッグ で,
プロパティ
コマンドライン引数 > Q:\cs2\ca1.csv
作業ディレクトリ$(ProjectDir)

とします, ここでQ:\cs2デスクトップ>PC>Qドライブ直下のフォルダcs2で, あらかじめ作っておく必要があります, (デバッグ無しで)実行すると, ファイルQ:\cs2\ca1.csvに実行結果(標準出力)が保存されます. つまり, Qドライブ直下のフォルダcs2の中の ca1.csv です. これをExcelなどで開けばいいのです.

ここでの区切り文字"\"は, 日本語変換をオフにして, 日本語キーボードの右上や右下にある\キーで入力できるかも.

ca1.csvは自分で決めたファイル名です. 自分でわかる名前を好きにつけてください. .csvは, こういう書式のテキストファイルによくつける拡張子で, comma separated values の略です.

ファイル名にはスペース(空白文字)を使わないでください.

上の > は説明のためのかっこでなく, 実際に入力すべきキャラクタです. Linux の shell でリダイレクトに使う記法と同じです. 前後の空白文字はあってもなくてもいいです.

フォルダ名とソリューション名は, 同じでも違ってもいいです. 上でいうフォルダは, Q:\Visual Studio 2013\Projects\cs2と位置が異なります.

上の設定は, (下とは違って)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がデフォルトになっていますが,この中には入出力ファイルは置けないということです. 気をつけましょう.

このサイトのコンテンツ

QRcode to hig3.net

http://hig3.net