2
4

1 回答 1

5

好的,我从评论开始,但它失去了控制。

写作

这个:

WCHAR *lpszText = new WCHAR[dwTextSize];

应该:

WCHAR *lpszText = new WCHAR[dwTextSize+1];

这个:

DeleteObject(hTextFile);

根本不应该在那里. 摆脱它。

delete [] lpszText;当你完成它时,我假设你在某个地方。如果没有,请这样做。


阅读

第二个参数GetFileSize()不应与您的返回值是同一个变量。对于大文件大小,它是 64 位值的 HIGH 32 位。如果您知道您的文件大小小于 4gB,则可以将其保留为 NULL,因此请更改以下内容:

DWORD dwFileSize = GetFileSize(hTextFile, &dwFileSize);

对此:

DWORD dwFileSize = GetFileSize(hTextFile, NULL);

您必须考虑文件缓冲区的空终止符,因此:

WCHAR *lpszText = new WCHAR[dwFileSize / 2];

应该改成这样:

WCHAR *lpszText = new WCHAR[dwFileSize / 2 + 1];
lpszText[dwFileSize / 2] = 0;

其余的应该像你希望的那样工作。没有错误检查,这不好,但我见过更糟的。delete [] lpszText;和以前一样,当你完成它时,我假设你在某个地方。如果没有,请这样做。

于 2013-02-01T17:10:14.497 回答