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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Jimmy

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

#1

投稿記事 by Jimmy » 12年前

コード:

#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」をデスクトップに作成する場合はどうしたらいいですか?
パス名にユーザー名が含まれてしまうので分かりません。特殊な記号等も用いるですか?教えてください!!

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 12年前

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
サンプルコードは下のレスにあります。
最後に編集したユーザー みけCAT on 2012年8月01日(水) 19:37 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

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

#3

投稿記事 by かずま » 12年前

これでどうでしょうか。

コード:

#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;
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 12年前

>>かずまさん
環境依存ですね。
私の場合、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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Jimmy

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

#5

投稿記事 by Jimmy » 12年前

お二人ともありがとうございます。

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

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

nil
記事: 428
登録日時: 12年前

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

#6

投稿記事 by nil » 12年前

みけさんのおっしゃった通り環境依存のようです。
僕の環境ではC:\Users\ユーザー名\Desktop
ですからJimmyさんのコードではまともには動かないかと。

Jimmy

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

#7

投稿記事 by Jimmy » 12年前

環境依存とはなんでしょうか?

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

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#8

投稿記事 by ISLe » 12年前

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#9

投稿記事 by softya(ソフト屋) » 12年前

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

みけCATさんが提示してくれた方法がマイクロソフトの推奨する環境依存しないデスクトップフォルダの取得方法ですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る