毕业设计在做本地文件管理,需要将本地的文件信息都存入数据库,本地文件的列表建立代码如下:
    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,数据库插入的部分在循环外都可以执行,但是一放到文件查找的循环里就不能运行.求解. 

解决方案 »

  1.   

    看了一下你的代码;
    while (bContinue== TRUE)这是一个死循环啊;
    你仔细检查一下代码。
      

  2.   

    你这样肯定不是很好每插入一条记录你都要插入,更新 多麻烦。   直接用 connection 的execute 来做成一个函数。来插入到数据库,很快的。
     看我下面写的封装函数://数据库的插入操作
    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 全局的连接对象。
      

  3.   

    还有你那个查找都好有问题。
    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()); }
    }

    }
      

  4.   

    谢谢smilehsh() ,问题已经解决