私はファイル(Unicodeでエンコードされたテキストファイル)の読み取りをいじくり回してきましたが、何らかの理由で出力の最初に疑問符が表示されます。
これがコードです。
#include <iostream>
#include <Windows.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
HANDLE hFile = CreateFile(L"dog.txt",
GENERIC_READ,
NULL,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
_setmode(_fileno(stdout), _O_U16TEXT); //Making sure the console will
//display the wide characters
//correctly. See below for link
LARGE_INTEGER li;
GetFileSizeEx(hFile,&li);
WCHAR* pBuf = new WCHAR[li.QuadPart / sizeof(WCHAR)]; //Allocating space for
//the file.
DWORD dwRead = 0;
BOOL bFinishRead = FALSE;
do
{
bFinishRead = ReadFile(hFile,pBuf,li.QuadPart,&dwRead,NULL);
} while(!bFinishRead);
pBuf[li.QuadPart / sizeof(WCHAR)] = 0; //Making sure the end of the output
//is null-terminated.
std::wcout << pBuf << std::endl;
std::cin.get();
return 1;
}
dog.txt
One Two Three
コンソール出力
?One Two Three
出力の終わりがnullで終了することを確認することで、すでに多くのぎこちなさを排除しましたが、?最初は私を困惑させます。
は
_setmode(_fileno(stdout), _O_U16TEXT);
WindowsコンソールアプリでのUnicode文字列の出力を参照してください
注:私のコードはWindows指向であり、可能であればそのように維持するつもりです。
ありがとう。