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

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

解決済みの質問

VisualC++6.0 で main関数への引数

#include<stdio.h>
int main(int argc,char *argv[])
{
  FILE *fp;
  fp=fopen("abc.txt","w");
}


こんな感じの xyz という名前のプログラムがあります。
MS-DOSで、xyzと同じディレクトリから
  xyz tekitou リターン
と打ち込んでプログラムを起動させたらxyzと同じディレクトリの中に
abc.txtを作成してくれます。xyz.exeのダブルクリック起動でも
同様の結果です。

だけどxyz.exeのアイコンの上に適当なファイルを
ドラッグ&ドロップさせて起動させた場合
abc.txtは全然別の場所に作成されてしまいます。

正確に言うと、Windows98上でVisualC++6.0を使用して
上記のプログラムでデスクトップ上にxyz.exeを作成して
(C:\WINDOWS\デスクトップ\xyz.exeの)アイコンに
適当なファイルをD&Dしてプログラムを実行したらC:\にabc.txtが
できたということです。

私としては同じディレクトリ内に作成してくれなくては
都合が悪いのです。この現象が起きる理由あるいは
解決法をご存知の方がいらっしゃいましたらどうかよろしく
お願いします。

投稿日時 - 2001-05-03 22:01:14

QNo.71245

暇なときに回答ください

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

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
char buf[1024];
GetModuleFileName(NULL, buf, sizeof(buf));

// ここで
// bufから xyz.exe を取り除き
// テキストファイルのフルパスを生成する

// ここで本来の処理

return 0;
}

GetModuleFileName()という関数を使えば xyz.exe の存在する位置のフルパスを取得できますから、それを使ってやればいいです。詳細はマニュアルを調べてください。

投稿日時 - 2001-05-03 23:01:06

お礼

たいへんありがとうございます。
この方法を使えば完全に解決できました。

投稿日時 - 2001-05-03 23:30:55

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

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

回答(2)

ANo.1

設定の変更が必要です
xyz.exeを右クリック→プロパティ→プログラム→作業ディレクトリ
これをC:\Windows\デスクトップに設定すればいいと思います

投稿日時 - 2001-05-03 22:16:53

補足

たいへんありがとうございます!!
どうかもう一声お願いします。
xyz.exeを
エル・エス・アイ ジャパン(株)の 「LSI C-86 Ver 3.3 試食版」
で作成したのならあなた様のおっしゃるとおりに解決できました。

ですがVCで作成した実行ファイルでは(私の環境では)
右クリック→プロパティ→・・・全般
のタブしかでてきません。
LSIで作成したものでは
全般、プログラム、フォント、メモリ、画面、その他
のタブが出てくるのですが・・・

VCでこれらの項目を出現させるにはどうしたらよいのでしょうか?

投稿日時 - 2001-05-03 23:27:23

お礼

タブの出現方法を知りたかったのですが
本来の質問と大きく離れた内容なので
別の場で質問させてもらおうと思います。

たいへんありがとうございました。

投稿日時 - 2001-05-03 23:45:27

あなたにオススメの質問