使用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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值