トップページ > プログラム > 2015年09月17日 > rzmccn0E

書き込み順位&時間帯一覧

5 位/157 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000002210000005



使用した名前一覧書き込んだスレッド一覧
sage
130
Win32API質問箱 Build121 [転載禁止]©2ch.net

書き込みレス一覧

Win32API質問箱 Build121 [転載禁止]©2ch.net
130 :sage[]:2015/09/17(木) 15:36:32.51 ID:rzmccn0E
Win32APIを使ってテキストファイルから1文字だけ取り出そうとしているのですが、できません。
アドバイスもらえないでしょうか?
以下ソースコードです。
=====ここから=====
int _tmain()
{
HANDLE hFile = NULL;
TCHAR *strFileName = 0;
TCHAR buff = 0;
DWORD byte_read = 0;

_tsetlocale(LC_ALL, TEXT("ja"));

// 読み込むファイルのフルパス。
strFileName = TEXT("D:/visualStudio/test/test3.txt");
Win32API質問箱 Build121 [転載禁止]©2ch.net
131 :sage[]:2015/09/17(木) 15:37:04.86 ID:rzmccn0E
// 読み込むファイルのファイルハンドル。
hFile = CreateFile(
strFileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
);
// ファイルハンドルのエラー処理。
if (hFile == INVALID_HANDLE_VALUE || hFile == NULL) {
_tprintf(TEXT("hFile error.\n"));
_gettchar();
return 0;
}

// ファイルから1文字読み込む。
ReadFile(hFile, &buff, (DWORD)sizeof(TCHAR), &byte_read, NULL);

// 読み込んだ1文字を表示。
_tprintf(TEXT("%c\n"), &buff);

CloseHandle(hFile);

_gettchar();
return 0;

}
=====ここまで=====
Win32API質問箱 Build121 [転載禁止]©2ch.net
135 :130[sage]:2015/09/17(木) 16:06:25.74 ID:rzmccn0E
レスありがとうございます。
>>132
>>133
&buff→buffに変更してもコマンドプロンプトには?しか表示されないままです。
test3.txtはサクラエディタを使って、Unicode、改行文字コードCRLFで保存しています。
test3.txtの内容は1行目にabcという文字列があります。

>>134
temp = ReadFile(hFile, &buff, (DWORD)sizeof(TCHAR), &byte_read, NULL);
// 読み込みのエラー処理。
if (temp == 0) {
_tprintf(TEXT("ReadFile error.\n"));
_gettchar();
return 0;
}
としてみましたが、特にエラーは出てないようです。

なぜできないのか、心当たりが無くなってしまって途方に暮れています。
ちなみに1文字ではなく、文字列全体を取得することならできました。
Win32API質問箱 Build121 [転載禁止]©2ch.net
137 :130[sage]:2015/09/17(木) 16:26:57.31 ID:rzmccn0E
>>136
ありがとうございます!
試してきます!
Win32API質問箱 Build121 [転載禁止]©2ch.net
139 :130[sage]:2015/09/17(木) 17:23:07.39 ID:rzmccn0E
>>138
つかめてきました!
ありがとうございます!

結局引っかかっていたのはUnicodeのBOMが大きな要因でした。
助かりましたorz


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。