• ベストアンサー
  • 暇なときにでも

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

  • 質問No.3970806
  • 閲覧数162
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 81% (39/48)

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

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

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

  • 回答No.1
  • ベストアンサー

ベストアンサー率 71% (1325/1856)

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

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

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

お礼率 81% (39/48)

ご回答ありがとうございます。
今見てみたら「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
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ