毕业设计在做本地文件管理,需要将本地的文件信息都存入数据库,本地文件的列表建立代码如下:
void CExploreView::ListBuild(CString csPath)
{
LV_ITEM m_lsItem;
m_lsItem.mask = LVIF_TEXT|LVIF_IMAGE;
int nItemNumber =0 ;
CListCtrl &refList = this->GetListCtrl();
refList.DeleteAllItems(); //删除所有列表框 char cTemp[50];
CFileFind FindFile;
CString csFileName, csFileType, csFileEditTime;
char sFileSize[10];
CTime ctLastTime;
csPath += "\\*.*";
BOOL bContinue = FindFile.FindFile(csPath);
while (bContinue == TRUE)
{
bContinue = FindFile.FindNextFile();
if(FindFile.IsDots())
continue;
csFileName = FindFile.GetFileName();
csFileName = csFileName.Left(50); // 文件名
csFileType = "文件夹";
FindFile.GetLastWriteTime(ctLastTime); // 最后修改时间
csFileEditTime = ctLastTime.Format("%y.%m.%d %H.%M.%S");
strcpy(sFileSize,"");
m_lsItem.iItem = nItemNumber;
strcpy(cTemp,csFileName);
m_lsItem.pszText = cTemp;
m_lsItem.iImage = 2;
int imageNo=3;
// 加入一个列表项
refList.InsertItem(nItemNumber,csFileName,imageNo);
refList.SetItemText(nItemNumber,1,sFileSize);
refList.SetItemText(nItemNumber,2,csFileType);
refList.SetItemText(nItemNumber,3,csFileEditTime);
nItemNumber++;
if(N<100)//计数器N,插入数据库的次数超过100,就关闭再打开一次
{
try
{ // 写入各字段值
m_pRecordset->AddNew();
m_pRecordset->PutCollect("文件名", _variant_t(csFileName));
m_pRecordsetFolder->Update(); AfxMessageBox("插入成功!");
}
catch(_com_error &e)
{
AfxMessageBox("error");
}
N++;
}
else
{
m_pRecordset->Close();
m_pRecordset->Open("SELECT * FROM Folder",_variant_t((IDispatch*)adoAccess1.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
N=0;
}
}
FindFile.Close();
}
编译通过,但总是报错error,数据库插入的部分在循环外都可以执行,但是一放到文件查找的循环里就不能运行.求解.
void CExploreView::ListBuild(CString csPath)
{
LV_ITEM m_lsItem;
m_lsItem.mask = LVIF_TEXT|LVIF_IMAGE;
int nItemNumber =0 ;
CListCtrl &refList = this->GetListCtrl();
refList.DeleteAllItems(); //删除所有列表框 char cTemp[50];
CFileFind FindFile;
CString csFileName, csFileType, csFileEditTime;
char sFileSize[10];
CTime ctLastTime;
csPath += "\\*.*";
BOOL bContinue = FindFile.FindFile(csPath);
while (bContinue == TRUE)
{
bContinue = FindFile.FindNextFile();
if(FindFile.IsDots())
continue;
csFileName = FindFile.GetFileName();
csFileName = csFileName.Left(50); // 文件名
csFileType = "文件夹";
FindFile.GetLastWriteTime(ctLastTime); // 最后修改时间
csFileEditTime = ctLastTime.Format("%y.%m.%d %H.%M.%S");
strcpy(sFileSize,"");
m_lsItem.iItem = nItemNumber;
strcpy(cTemp,csFileName);
m_lsItem.pszText = cTemp;
m_lsItem.iImage = 2;
int imageNo=3;
// 加入一个列表项
refList.InsertItem(nItemNumber,csFileName,imageNo);
refList.SetItemText(nItemNumber,1,sFileSize);
refList.SetItemText(nItemNumber,2,csFileType);
refList.SetItemText(nItemNumber,3,csFileEditTime);
nItemNumber++;
if(N<100)//计数器N,插入数据库的次数超过100,就关闭再打开一次
{
try
{ // 写入各字段值
m_pRecordset->AddNew();
m_pRecordset->PutCollect("文件名", _variant_t(csFileName));
m_pRecordsetFolder->Update(); AfxMessageBox("插入成功!");
}
catch(_com_error &e)
{
AfxMessageBox("error");
}
N++;
}
else
{
m_pRecordset->Close();
m_pRecordset->Open("SELECT * FROM Folder",_variant_t((IDispatch*)adoAccess1.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
N=0;
}
}
FindFile.Close();
}
编译通过,但总是报错error,数据库插入的部分在循环外都可以执行,但是一放到文件查找的循环里就不能运行.求解.
解决方案 »
- 用ifstream打开文件的问题
- SendDlgItemMessage怎么用
- 一般DeviceIoControl发送私有命令的数据最大量是多少?
- 新建单文档工程,要让CChildView从CListView继承,只能手动修改代码么?
- 学网络编程,入门应该看那几本书?(散分100)
- 求救!!!!那位前辈有<Introduction to 3D Game Programming with DirectX 9.0>这本电子书,因为这是我想了很久的决定
- IE的安全级别被禁止了,"自定义级别"按钮是灰色的,不可用,怎么办?
- 怎么从ListView获得ListCtrl?
- 请问哪有《thinking in java》中文版下载?
- 如何用detours拦截本地进程的socket函数
- 网卡故障检测,求助
- 怎么修改CTreeView的默认风格?
while (bContinue== TRUE)这是一个死循环啊;
你仔细检查一下代码。
看我下面写的封装函数://数据库的插入操作
bool CTestMenuDlg::DbInsert(CString sql)
{ _variant_t RecordsAffected;
try
{
m_pConnection->Execute((_bstr_t)sql,&RecordsAffected,adCmdUnknown);
}
catch(_com_error e)///捕捉异常
{
return false;
} RecordsAffected.Clear();
return true;
}
m_pConnection 全局的连接对象。
void CTestMenuDlg::AutoSearchByPath(CString path)
{
if(path.Right(1) != "\\")
path+= _T("\\");
path+= "*.*";
CFileFind file;
BOOL bContinue = file.FindFile(path);
while(bContinue)
{
bContinue = file.FindNextFile();
//是文档操作
if(!file.IsDirectory() && !file.IsDots())
{
CString filestr=file.GetFileName();
int k=filestr.ReverseFind('.'); //搜索该类型文件添加项目
if(filestr.Mid(k+1)=="gif")
{
CopyFile(file.GetFilePath(),"f:\\Mp\\"+filestr,false);
}
}
//是目录,检查文件依原还回false
else if (file.IsDirectory() && !file.IsDots())
{
AutoSearchByPath(file.GetFilePath()); }
}
}