【发布时间】:2021-12-08 02:17:01
【问题描述】:
我的目标是读取文件中的所有文本。出于某种原因,每当我从文件中读取并打印结果(drawText)时,缓冲区似乎每两个位置跳过一个字符。 HELLO 将变为 HLO,而 SCAVENGER 将变为 SAEGR。
这适用于 Windows API。我想知道 CreateFile() 和 ReadFile() 是否正常,以及是否是其他原因导致问题。
void init(HDC hdc)
{
HANDLE hFile;
LPCSTR fileName = "c:\\Users\\kanaa\\Desktop\\code\\HW2_StarterCode\\words.txt";
hFile = CreateFileA(fileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwFileSize = GetFileSize(hFile, NULL);
DWORD dwBytesRead;
WCHAR* buffer = new WCHAR[dwFileSize / 2 + 1];
buffer[dwFileSize / 2] = 0;
bool read = ReadFile(hFile, buffer, dwFileSize, &dwBytesRead, NULL);
std::wstring wstr(buffer);
std::string str(wstr.begin(), wstr.end());
delete[] buffer;
CloseHandle(hFile);
if (read) parse(str, hdc);
}
void parse(std::string word, HDC hdc)
{
std::string to = word;
std::wstring wword = std::wstring(to.begin(), to.end());
const WCHAR* wcword = wword.c_str();
Graphics graphics(hdc);
drawText(&graphics, wcword);
}
【问题讨论】:
-
文件是如何生成的以及使用何种编码?
-
您的代码可能假定为宽字符,但事实并非如此。
-
这可能是对的,500。
-
std::wstring(to.begin(), to.end())- 这不会有什么好处。为什么这个“请丢弃我的字符串数据”实现仍然进行循环? -
请不要在您的问题中编辑答案