質問 |
||
| QNo.3970806 | Win環境においてドラッグに対応 | |
|---|---|---|
| 質問者:xkuonx |
Windows環境でC言語のプログラミングをしております。 main関数の引数、ファイルの入出力に関する質問になります。 ★実行環境 コンパイラ:MinGW(GNU GCCコンパイラ) OS:Windows XP Professional ★やりたい事 データファイルをEXEファイルにドラッグして、そのファイルの中身を読み込み 読み込んだデータを利用してファイルを出力。 ★出力結果イメージ 文字列「123456789」が一行に入力されているテキストデータ「data.txt」を、 作成した「io.c」をコンパイルしてできた実行ファイル「io.exe」にドラッグし、 ドラッグされたファイル名をmain引数で受け取り、 そのファイルを読み込み下記のような内容のテキストファイル「output.txt」を作成する。 ----- 1 ----- (中略) ----- 9 ----- ★現在のソース(エラー処理等省略) #include <stdio.h> #define MAX 100 int main(int argc,char *argv[]) { FILE *in; FILE *out; char data[MAX]; int i; if((in = fopen(argv[1],"r")) == NULL) { return 0; } if((out = fopen("output.txt","w")) == NULL) { return 0; } fgets(data,MAX,in); for(i = 0;data[i] != '\0';i++) { fprintf(out,"----- %c -----\n",data[i]); } fclose(in); fclose(out); return 0; } ★問題点 コマンドプロンプトで「io.exe data.txt」と入力すると問題無くexeのカレントディレクトリに「output.txt」ができ、 中身も求めているデータなのですが、Windows上で data.txtを直接マウスでio.exeにドラッグすると、output.txtが出力されません。 実際にargv[1]には正常にファイル名のフルパスが入っており、 argv[1]を使用してファイルの内容を読み取る事に成功しています。 しかし、ドラッグした場合のみfprintfが求めている結果を返してくれません。 この原因、および対策方法をご教授頂ければと思います。 よろしくお願い致します。 |
|
困り度:
|
||
| 質問投稿日時: 08/04/23 21:12 |
||
回答良回答20pt |
|
| ANo.1 | 実行時のカレントフォルダーが違うためでしょう WindwosでEXEファイルなどにそのままドラッグアンドドロップした場合 最近のWinXPなどは C:\Docuemnts and Settings\ユーザー名 フォルダをカレントにして動作するようですよ PIFファイルや ショートカットと作成して作業フォルダを指示してみましょう または アプリケーション内で フォルダーを決め打ち(ハードコーディング)にしてしまうとか |
|---|---|
| 回答者:redfox63 | |
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| 回答日時: 08/04/23 23:28 |
|
| |
| この回答へのお礼 | ご回答ありがとうございます。 今見てみたら「C:\Docuemnts and Settings\ユーザー名」フォルダにoutput.txtが正常に生成されていました! また、 「if((out = fopen("output.txt","w")) == NULL)」を 「if((out = fopen("c:\\c\\output.txt","w")) == NULL)」 のように変更を加えてみたところ、指定したディレクトリにファイルが出力されました。 ありがとうございました。 |