みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Win環境においてドラッグに対応

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が求めている結果を返してくれません。

この原因、および対策方法をご教授頂ければと思います。
よろしくお願い致します。

投稿日時 - 2008-04-23 21:12:38

QNo.3970806

暇なときに回答ください

質問者が選んだベストアンサー

実行時のカレントフォルダーが違うためでしょう

WindwosでEXEファイルなどにそのままドラッグアンドドロップした場合
最近のWinXPなどは C:\Docuemnts and Settings\ユーザー名 フォルダをカレントにして動作するようですよ

PIFファイルや ショートカットと作成して作業フォルダを指示してみましょう
または アプリケーション内で フォルダーを決め打ち(ハードコーディング)にしてしまうとか

投稿日時 - 2008-04-23 23:28:47

お礼

ご回答ありがとうございます。
今見てみたら「C:\Docuemnts and Settings\ユーザー名」フォルダにoutput.txtが正常に生成されていました!
また、
「if((out = fopen("output.txt","w")) == NULL)」を
「if((out = fopen("c:\\c\\output.txt","w")) == NULL)」
のように変更を加えてみたところ、指定したディレクトリにファイルが出力されました。
ありがとうございました。

投稿日時 - 2008-04-23 23:47:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問