用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"; //这里要写路径