【发布时间】:2017-09-19 09:52:17
【问题描述】:
我正在尝试使用 Windows 函数 ReadFile() 从文件中读取,但是当我打印消息时,它会打印太多字符。
无论我从 ANSII 文件还是 UNICODE 文件中读取,我都没有得到正确的字符。
文件中的文本是:“这是一个文本文件”。
我做错了什么?
#define BUFSIZE 4000
int _tmain(int argc, TCHAR *argv[])
{
HANDLE hIn;
TCHAR buffer[BUFSIZE];
DWORD nIn = 0;
//create file
hIn = CreateFile(argv[1],
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
//check the handle
if (hIn == INVALID_HANDLE_VALUE)
{
printf("\nOpen file error\n");
}
//read from file
if (FALSE == ReadFile(hIn, buffer, BUFSIZE - 1, &nIn, NULL))
{
printf("Terminal failure: Unable to read from file.\n GetLastError=%08x\n", GetLastError());
CloseHandle(hIn);
return 0;
}
if (nIn > 0 && nIn <= BUFSIZE - 1)
{
buffer[nIn] = TEXT('\0'); // NULL character
_tprintf(TEXT("Data read from %s (%d bytes): \n"), argv[1], nIn);
}
else if (nIn == 0)
{
_tprintf(TEXT("No data read from file %s\n"), argv[1]);
}
else
{
printf("\n ** Unexpected value for nIn ** \n");
}
printf("1:%s\n", buffer);
_tprintf(TEXT("\n2:%s"), buffer);
return 0;
}
【问题讨论】:
-
你为什么使用 TCHAR?你在Win98上运行吗?
-
不,但要制作一个通用程序,用于简单的字符或宽字符。
-
使用TCHAR是错误的。明确。 TCHAR 只会让您感到困惑,尤其是因为您还没有真正清楚地理解文本编码。额外的间接性只会让您更加困惑。