CreateFile失败别慌,快速排查这几个常见原因!

吉云

今天跟大家聊聊我昨天遇到的一个坑,关于CreateFile函数调用失败的。这玩意儿,看着简单,实际用起来真能让人头大。

事情是这样的,昨天我在搞一个文件读写的程序,需要用到CreateFile来打开或者创建一个文件。代码很简单,就几行,但是我一运行,死活创建不成功!返回的句柄是INVALID_HANDLE_VALUE,错误码是5,也就是“拒绝访问”。

我以为是路径写错,赶紧检查一遍,路径是绝对路径,文件夹也存在,看起来没啥问题。我又试试相对路径,还是不行。难道是文件名有问题?我把文件名改成最简单的"*",还是跪!

CreateFile失败别慌,快速排查这几个常见原因!

折腾半天,我开始怀疑是不是权限问题。因为错误码提示的是“拒绝访问”,我寻思是不是当前用户没有权限在这个目录下创建文件。于是我右键文件夹,安全选项卡,把当前用户的权限改成“完全控制”。重新运行程序,还是不行!我真是要崩溃。

没办法,只能开始Google。网上搜一大堆,各种说法都有,什么文件被占用,磁盘空间不足等等。我一一排查,文件肯定没被占用,磁盘空间也足够。难道是我的代码有问题?

我把代码贴出来,仔仔细细地检查,发现CreateFile的参数里有一个dwShareMode,这个参数控制着文件的共享模式。我之前设置的是0,也就是独占模式。我突然想到,会不会是其他程序也在试图访问这个文件,导致我的CreateFile失败?

为验证这个想法,我把dwShareMode改成FILE_SHARE_READ FILE_SHARE_WRITE,也就是允许其他程序读写共享。重新编译运行,这回居然成功!文件创建成功!

总结一下这回踩坑的经验:

    CreateFile失败别慌,快速排查这几个常见原因!

  • CreateFile失败的原因有很多,权限问题、路径问题、文件被占用等等。
  • 一定要仔细检查CreateFile的参数,尤其是dwShareMode,这个参数很容易被忽略。
  • 遇到问题不要慌,先Google一下,看看有没有类似的案例。

虽然这回只是一个很小的坑,但是也让我学到很多。希望我的经验能帮到大家,避免踩同样的坑。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]