ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

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)」
のように変更を加えてみたところ、指定したディレクトリにファイルが出力されました。
ありがとうございました。