CreateFile 总是调用错误的解决办法

本文介绍了使用MFC编程时,遇到CreateFile函数因路径缺失而导致的错误。详细解释了如何确保传递给函数的文件名包含完整路径,避免默认路径引起的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用VC6.0写一个MFC程序调用了CreateFile函数,结果总是出错,

 

hFile = CreateFile(strFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
 if (hFile==INVALID_HANDLE_VALUE)                                        //如果CreateFile调用失败 
 {  
  //提示CreateFile调用失败,并输出错误号。visual studio中可在“工具”>“错误查找”中利用错误号得到错误信息。 
  CloseHandle(hFile);
  return cret;
 }

 

查了很多相关资料,解决办法就在于 strFileName ,这个是文件名 ,这个文件名必须是带有该文件路径,否则就错误,因此需要在传入该参数时写入该文件的全路径

之所以我会发现我程序里面会有这个错误,是因为我程序里面用了一个CFileDialog dlg(TRUE, NULL, NULL, 0, "文本文档(*.txt)|*.txt");
 if (dlg.DoModal() == IDOK)

{

//当我选择完txt程序后,默认的路径就发生改变,而如果再调用CreateFile时没有给文件设置路径的话,函数会从默认路径(也就是修改后的路径)找该文件,这个文件在这个路径不存在,所以CreateFile总是错误

}

获取路径的参考

TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在WINDEF.h中定义了,等于260
 memset(exeFullPath,0,MAX_PATH);
 ::GetModuleFileName(NULL,exeFullPath,MAX_PATH);
 TCHAR drive[_MAX_DRIVE];
 TCHAR dir[_MAX_DIR];
 char fname[_MAX_FNAME];
    char ext[_MAX_EXT];
 //函数可以从路径中分解出 盘符、目录、文件名、文件后缀等。是一个非常有用的函数。
 ::_tsplitpath( exeFullPath, drive, dir,fname , ext);
 
 CString strDllPath(drive);
 strDllPath += dir;
 // CString strDllPath;
 strDllPath += "help.dll";  //这里要写路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToneChip

觉得博主写得不错欢迎鼓励支持哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值