主题:为什么找不到数据库文件?
为什么找不到文件?
我用MFC做了一个打字测试软件,在这个软件中有一个用Access创建的有关用户信息的数据库文件,一个用记事本制作的中文文本文件和一个用记事本制作的英文文本文件(用于打字测试),并把以上三个文件都放在了这个工程的Debug目录下,整个程序在编译时没有错误,但在运行时报错:“没有数据库文件USER.MDB”我把检查数据库文件的代码注释起来,又报错:English.txt(英文测试文件不存在),我把检查英文测试的代码再注释起来,又报错:Chinese.txt(中文测试文件不存在),我把检查中文测试的代码也注释起来,最后报错:连接数据库失败。
并且我在本工程的Debug文件夹里双击以上说的三个文件都会提示:此文件有多个扩展名。
不明白是什么原因,求求各位高手给予指教。谢谢了!
以下是有关的代码:
BOOL CTypingTestApp::InitInstance()
{
//设置应用程序所在的目录为当前目录
CString strRootPath;
strRootPath=AfxGetApp()->m_pszHelpFilePath; //得到应用程序的路径含应用程序文件名
int index=strRootPath.ReverseFind('\\'); //找最后"\"的位置
SetCurrentDirectory(strRootPath.Left(index)); //设置当前路径为应用程序所在路径
//设置应用程序所在的目录为当前目录
//检查数据文本文件,中文范文文件和英文范文文件是否存在
//得到文件路径
char szFilePath[MAX_PATH],szUser[MAX_PATH],szEngl[MAX_PATH],szChina[MAX_PATH];
char *p;
GetModuleFileName(NULL,szFilePath,MAX_PATH); //得到程序文件名及其绝对路径
//分离路径和文件名
p=szFilePath;
while(strchr(p,'\\')) //查找字符串s中首次出现字符"\"的位置
{
p=strchr(p,'\\'); //返回首次出现"\"的位置的指针,如果p中不存在"\"则返回NULL
p++; //指针向后移一个字符,不然还是找到的第一个"\"字符
}
*p='\0'; /*将最后一个"\"后的字符用字符串结束符"\0"替换,即将文件名、去掉,只得到路径名,把路径存在szFilePath里*/
SetCurrentDirectory(szFilePath); //设置当前路径为程序文件所在的路径
strcpy(szUser,szFilePath);strcpy(szEngl,szFilePath);strcpy(szChina,szFilePath);
strcat(szUser,"USER.MDB");strcat(szEngl,"English.txt");
strcat(szChina,"Chinese.txt");
//检查数据库文件USER.MDB是否存在
FILE *File=NULL; //文件句柄
File=fopen(szUser,"r"); //检查文件是否存在
if(!File) //数据库文件USER.MDB如不存在
{
MessageBox(NULL,"没有数据库文件USER.MDB","出错信息",MB_OK); /*提示数据库文件不存在*/
ExitProcess(EXIT_FAILURE); //退出程序
}
File=fopen(szEngl,"r"); //检查英文范文文件是否存在
if(!File) //英文打字范文文件English.txt如不存在
{
MessageBox(NULL,"English.txt","",MB_OK); //提示文件不存在
ExitProcess(EXIT_FAILURE); //退出程序
}
File=fopen(szChina,"r"); //检查中文范文文件是否存在
if(!File) //中文打字范文文件Chinese.txt如不存在
{
MessageBox(NULL,"Chinese.txt","",MB_OK); //提示文件不存在
ExitProcess(EXIT_FAILURE); //退出程序
} //预防读文件错的代码结束
//COM库的初始化
if(!AfxOleInit())
{
AfxMessageBox("初始化COM库失败");
return FALSE;
}
//COM库的初始化结束
//]创建Connection对象
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection"); //创建Connection对象
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft.Jet OLEDB.4.0;Data Source=User.mdb;Persist security info=FALSE;Jet OLEDB:Database Password=081858","","",adModeUnknown);
//连接数据库
//上面一句中连接字符串中的Provider是针对ACCESS2000环境的,
//对于ACCESS97,需要改为:Provider=Microsoft.Jet OLEDB.3.51;
}
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
return false;
}
AfxEnableControlContainer();
}
我用MFC做了一个打字测试软件,在这个软件中有一个用Access创建的有关用户信息的数据库文件,一个用记事本制作的中文文本文件和一个用记事本制作的英文文本文件(用于打字测试),并把以上三个文件都放在了这个工程的Debug目录下,整个程序在编译时没有错误,但在运行时报错:“没有数据库文件USER.MDB”我把检查数据库文件的代码注释起来,又报错:English.txt(英文测试文件不存在),我把检查英文测试的代码再注释起来,又报错:Chinese.txt(中文测试文件不存在),我把检查中文测试的代码也注释起来,最后报错:连接数据库失败。
并且我在本工程的Debug文件夹里双击以上说的三个文件都会提示:此文件有多个扩展名。
不明白是什么原因,求求各位高手给予指教。谢谢了!
以下是有关的代码:
BOOL CTypingTestApp::InitInstance()
{
//设置应用程序所在的目录为当前目录
CString strRootPath;
strRootPath=AfxGetApp()->m_pszHelpFilePath; //得到应用程序的路径含应用程序文件名
int index=strRootPath.ReverseFind('\\'); //找最后"\"的位置
SetCurrentDirectory(strRootPath.Left(index)); //设置当前路径为应用程序所在路径
//设置应用程序所在的目录为当前目录
//检查数据文本文件,中文范文文件和英文范文文件是否存在
//得到文件路径
char szFilePath[MAX_PATH],szUser[MAX_PATH],szEngl[MAX_PATH],szChina[MAX_PATH];
char *p;
GetModuleFileName(NULL,szFilePath,MAX_PATH); //得到程序文件名及其绝对路径
//分离路径和文件名
p=szFilePath;
while(strchr(p,'\\')) //查找字符串s中首次出现字符"\"的位置
{
p=strchr(p,'\\'); //返回首次出现"\"的位置的指针,如果p中不存在"\"则返回NULL
p++; //指针向后移一个字符,不然还是找到的第一个"\"字符
}
*p='\0'; /*将最后一个"\"后的字符用字符串结束符"\0"替换,即将文件名、去掉,只得到路径名,把路径存在szFilePath里*/
SetCurrentDirectory(szFilePath); //设置当前路径为程序文件所在的路径
strcpy(szUser,szFilePath);strcpy(szEngl,szFilePath);strcpy(szChina,szFilePath);
strcat(szUser,"USER.MDB");strcat(szEngl,"English.txt");
strcat(szChina,"Chinese.txt");
//检查数据库文件USER.MDB是否存在
FILE *File=NULL; //文件句柄
File=fopen(szUser,"r"); //检查文件是否存在
if(!File) //数据库文件USER.MDB如不存在
{
MessageBox(NULL,"没有数据库文件USER.MDB","出错信息",MB_OK); /*提示数据库文件不存在*/
ExitProcess(EXIT_FAILURE); //退出程序
}
File=fopen(szEngl,"r"); //检查英文范文文件是否存在
if(!File) //英文打字范文文件English.txt如不存在
{
MessageBox(NULL,"English.txt","",MB_OK); //提示文件不存在
ExitProcess(EXIT_FAILURE); //退出程序
}
File=fopen(szChina,"r"); //检查中文范文文件是否存在
if(!File) //中文打字范文文件Chinese.txt如不存在
{
MessageBox(NULL,"Chinese.txt","",MB_OK); //提示文件不存在
ExitProcess(EXIT_FAILURE); //退出程序
} //预防读文件错的代码结束
//COM库的初始化
if(!AfxOleInit())
{
AfxMessageBox("初始化COM库失败");
return FALSE;
}
//COM库的初始化结束
//]创建Connection对象
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection"); //创建Connection对象
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft.Jet OLEDB.4.0;Data Source=User.mdb;Persist security info=FALSE;Jet OLEDB:Database Password=081858","","",adModeUnknown);
//连接数据库
//上面一句中连接字符串中的Provider是针对ACCESS2000环境的,
//对于ACCESS97,需要改为:Provider=Microsoft.Jet OLEDB.3.51;
}
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
return false;
}
AfxEnableControlContainer();
}