我正在按照 TheForger 的 Win API 教程将文本文件加载到编辑控件中。有时整个文件被正确加载,有时它的最后一部分被遗漏,其中“部分”在一种情况下是 2 行半,在另一种情况下是 10 行 o_O 下面是文件的样子:
(我是一名新用户,所以它不允许我发布多个超链接,所以这里是截图所在的画廊:http://nancy.imgur.com/all/ 我指的是它们在画廊中出现的顺序)
遗漏 2.5 行:第二个(阅读在“F”之后的光标处停止)
遗漏 10 行:第四行(也停在 f 之后的光标处)
完整阅读:第一和第三
我尝试改用 fstreams,但遗漏了相同的内容(我也无法在编辑控件 =( ) 中显示换行符。知道哪里出了问题吗?
我无法链接到 theForger 的教程,所以这里是函数:
BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR pszFileName) {
HANDLE hFile;
BOOL bSuccess = FALSE;
hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwFileSize;
dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize != 0xFFFFFFFF)
{
LPSTR pszFileText;
pszFileText = GlobalAlloc(GPTR, dwFileSize + 1);
if(pszFileText != NULL)
{
DWORD dwRead;
if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
{
pszFileText[dwFileSize] = 0; // Add null terminator
if(SetWindowText(hEdit, pszFileText))
bSuccess = TRUE; // It worked!
}
GlobalFree(pszFileText);
}
}
CloseHandle(hFile);
}
return bSuccess; }
最佳答案
您的文本文件是否可能包含嵌入的 NUL 字符,因此字符串 pszFileText
比您预期的更早终止? SetWindowText()
函数在遇到第一个 NUL 终止符后停止读取。
此外,当从文件中读取时,您需要检查 dwRead
是否真的是您想要读取的字节数。如果 dwRead
小于 dwFileSize
会怎样?
关于C++,加载文本的函数忽略最后几行,只有一些 .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423417/