ファイルの読み出しが文字化け

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

ファイルの読み出しが文字化け

#1

投稿記事 by とく » 14年前

あるファイルのパスをファイルに書き込み保存して、あるタイミングで読み出したいのですが、「蓮」という字をReadFile関数を使用して読み出すときに文字化けしてしまいます。なぜかファイルに書き込むのはうまくいっています。対策はありますか?よろしくお願いします。

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

Re: ファイルの読み出しが文字化け

#2

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

できるだけシンプルにした問題が再現するソースコードを見せて頂けますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

とく

Re: ファイルの読み出しが文字化け

#3

投稿記事 by とく » 14年前

こちらがRead

コード:

	TCHAR TempPath[MAX_PATH]={0};
	DWORD FileSize,temp,PathSize;
	hFile = CreateFile(DirPath, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
	if(hFile == INVALID_HANDLE_VALUE){
		MessageBox::Show( "ファイルを開くことが出来ません。","ファイルオープンエラー");
		Close();
	}
	FileSize = GetFileSize(hFile,NULL)+1;
	TCHAR *heap = (TCHAR *)malloc(sizeof(TCHAR)*FileSize);
	TCHAR *p_heap=heap;
	ZeroMemory(heap,FileSize);
	ReadFile(hFile,heap,FileSize,&temp,NULL);
CloseHandle(hFile);

こちらがWrite DirPathにファイルの場所の文字列が入っています。

コード:

	TCHAR WritePath[sizeof(ExePath)+100];
	HANDLE hFile2;
	DWORD SizeData;
	int flag;
			
	wsprintf(WritePath,"%s@%s",ExePath[0],ExePath[1]);
	hFile2 = CreateFile(DirPath, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
	if(hFile2 == INVALID_HANDLE_VALUE){
		MessageBox::Show( "ファイルを開くことが出来ません。","ファイルオープンエラー");
		Close();
		return;
	}
	flag=WriteFile(hFile2,WritePath,lstrlen(WritePath),&SizeData,NULL);
	if(flag==NULL){
		MessageBox::Show( "ファイルの書き込みに失敗しました。","ファイル書き込みエラー");
	}
	CloseHandle(hFile2);

こんな感じでよろしいでしょうか?

GetOpenFileName関数をつかって、その後テキストボックスに文字列を入れるときは「蓮」の字が入るのですが
その後に上の手順で保存し、プログラムを終了→プログラム開始→ファイルを読み込む→テキストボックスに文字列を入れる
とやると「蓮」の文字が文字化けしてしまします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: ファイルの読み出しが文字化け

#4

投稿記事 by h2so5 » 14年前

あまり詳しくは知りませんが、「蓮」の字の2バイト目には @ が含まれているため、
wsprintfのフォーマット"%s@%s"に引っかかっている可能性があります。

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

Re: ファイルの読み出しが文字化け

#5

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

プロジェクトの構成のプロパティで文字セットはマルチバイト文字 or UNICODE文字のいずれでしょうか?
こちらで再現しないと的確なアドバイスが難しいので、出来ればそのまま動く形に整形したソースコードをお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

とく

Re: ファイルの読み出しが文字化け

#6

投稿記事 by とく » 14年前

@が引っかかっているかもしれないということで別の文字を試してみたところ!でうまくいきましたがなぜでしょうかね?
文字セットはマルチバイト文字です。
ソースコードは結構な量があるため難しいです。すいません。

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

Re: ファイルの読み出しが文字化け

#7

投稿記事 by ISLe » 14年前

wsprintf(WritePath,"%s@%s",ExePath[0],ExePath[1]);

wsprintf(WritePath,TEXT("%s@%s"),ExePath[0],ExePath[1]);
でないといけないのでは?

閉鎖

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