使用ReadFile程序崩溃的原因

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


在使用这个函数的时候,很多人都不会特意的去看MSDN文档后面的Remarks解释,所以可能有时候会出问题,而且不知道出在哪里。

这个函数的其它参数就不详细解释了,就说说lpNumberOfBytesRead这个参数。

MSDN原文:When a read operation reaches the end of a file, this function returns TRUE and sets * lpNumberOfBytesRead to zero.
这个字面上意思可能会被翻译成,当都操作到达文件尾的时候,返回TRUE,并且设置 *lpNumberOfBytesRead 这个为0。其真实情况是在本机中写代码测试运行的时候,不管你这个参数设不设置好像都没有什么问题。但是,当你将该程序放到别的电脑,或者虚拟机运行的时候,问题就会出现了(我也不知道为什么)。所以这就是这个函数崩溃的原因。引用空指针异常。

总结来说,多给它一个参数又不会死,怎么安全怎么来,不然真的是,软件做好了,到别人电脑上运行突然蹦了,然后一脸懵逼,而且代码又多,一个不知道是什么的BUG的BUG,真的很绝望,要调试很久才能慢慢的测试出来是哪里错了。所以啊,API的使用一定怎么安全怎么来!!!

下面贴出读文件的安全代码:

int ReadF(_In_ char* lpPath,_Out_ char* lpBuf, _In_ DWORD bufSize, _Out_ LPDWORD toReadSize)
{
	HANDLE hFile = CreateFile(lpPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
		return GetLastError();
	if (!ReadFile(hFile, lpBuf, bufSize, toReadSize, NULL))  
		return GetLastError();
	return TRUE;
}

你可能感兴趣的:(Windows程序设计)