ページ 11

デスクトップ上にファイルを作成

Posted: 2012年8月01日(水) 18:18
by Jimmy

コード:

#include <stdio.h>

int main(void)
{
	FILE *fp;
	char f;
	fp = fopen("C:\\test.txt","w");
	fprintf(fp,"Hello,world");
	fclose(fp);
	return 0;
}
とすればCドライブに「test.txt」が作成できることは分かりました。もし、「test.txt」をデスクトップに作成する場合はどうしたらいいですか?
パス名にユーザー名が含まれてしまうので分かりません。特殊な記号等も用いるですか?教えてください!!

Re: デスクトップ上にファイルを作成

Posted: 2012年8月01日(水) 19:07
by みけCAT
Windowsですよね?
windows.hをインクルードし、SHGetSpecialFolderPath()関数を使用します。
http://hp.vector.co.jp/authors/VA023539 ... ll/002.htm
http://katsura-kotonoha.sakura.ne.jp/pr ... 0008.shtml

訂正
shlobj.hをインクルードし、ShGetFolderPath関数を使用してください。
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
サンプルコードは下のレスにあります。

Re: デスクトップ上にファイルを作成

Posted: 2012年8月01日(水) 19:21
by かずま
これでどうでしょうか。

コード:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    const char *userprofile = getenv("USERPROFILE");
    char filename[1024];
    sprintf(filename, "%s\\Desktop\\test.txt", userprofile);
    fp = fopen(filename, "w");
    fprintf(fp, "hello, world\n");
    fclose(fp);
    return 0;
}

Re: デスクトップ上にファイルを作成

Posted: 2012年8月01日(水) 19:28
by みけCAT
>>かずまさん
環境依存ですね。
私の場合、USERPROFILE環境変数の中身はC:\Users\(ユーザー名)ですが、
デスクトップのディレクトリはD:\(ユーザー名)_documents\Desktopに変更しました。

このコードでできました。

コード:

#include <stdio.h>
#include <shlobj.h>

int main(void) {
	char folder[1000];
	char filePath[1000];
	FILE *fp;
	SHGetFolderPath(NULL,CSIDL_DESKTOP,NULL,0,folder);
	sprintf(filePath,"%s\\test.txt",folder);
	fp = fopen(filePath,"w");
	if(fp==NULL)return 1;
	fprintf(fp,"Hello,world");
	fclose(fp);
	return 0;
}

Re: デスクトップ上にファイルを作成

Posted: 2012年8月01日(水) 19:42
by Jimmy
お二人ともありがとうございます。

何度か試した結果、かずまさんのコードの9行目の
sprintf(filename, "%s\\Desktop\\test.txt", userprofile);
の「Desktop」を「デスクトップ」とカタカナにすると上手くいきました。getenv("USERPROFILE")覚えておきます!

みけCATさんもありがとうございました!
URLはひとまずブックマークしておきました。また必要になることもあると思うのでその時利用させていただきます。

Re: デスクトップ上にファイルを作成

Posted: 2012年8月01日(水) 20:50
by nil
みけさんのおっしゃった通り環境依存のようです。
僕の環境ではC:\Users\ユーザー名\Desktop
ですからJimmyさんのコードではまともには動かないかと。

Re: デスクトップ上にファイルを作成

Posted: 2012年8月01日(水) 22:38
by Jimmy
環境依存とはなんでしょうか?

まだこのプログラムは私には早すぎた気がします。ツールやゲームなどの目的のあるものを作っているわけではないので、いまはやめときます。いずれ、やる時が来たらご指導のほどよろしくお願いします。

Re: デスクトップ上にファイルを作成

Posted: 2012年8月02日(木) 00:01
by ISLe
Jimmy さんが書きました:環境依存とはなんでしょうか?
Windows XPまでは見た目どおりの「デスクトップ」というフォルダですが、Windows Vista以降は実際は「Desktop」で、見た目だけが「デスクトップ」となるように仕様が変わりました。

この手のフォルダパスの決め打ちは危険です。

Re: デスクトップ上にファイルを作成

Posted: 2012年8月02日(木) 10:58
by softya(ソフト屋)
環境依存とは、特定のバージョンのOSや、特定のハードウェア、特定の物がインストールされていないと動かない状況に依存する事を言います。
「デスクトップ」と言うフォルダ名決め打ちはISLeさんが説明している通り特定のバージョンのOSに依存しますので万能な方法ではないと言うことです。

みけCATさんが提示してくれた方法がマイクロソフトの推奨する環境依存しないデスクトップフォルダの取得方法ですね。