以下代码那里有问题,为什么一运行立即报内存错误bool IsRoot(char *tempdir)
{
char szroot[4];
::wsprintf(szroot,"%c:\\\0",tempdir[0]);
return(::lstrcmp(szroot,tempdir)==0); 

}
void seek(char *tempdir)
{
char dirpath[MAX_PATH];
::lstrcpy(dirpath,tempdir);
::lstrcat(dirpath,"\\");
::lstrcat(dirpath,"*.*"); 
HANDLE find;
WIN32_FIND_DATA findinfo;
find=::FindFirstFile(dirpath,&findinfo);
if(find==INVALID_HANDLE_VALUE)
return;
do
{
if(findinfo.cFileName=="."||findinfo.cFileName=="..")
continue;
char dirfile[MAX_PATH];
::lstrcpy(dirfile,tempdir);
if (!IsRoot(dirfile)) ::lstrcat(dirfile,"\\"); 
::lstrcat(dirfile,findinfo.cFileName);
if((GetFileAttributes(dirfile) & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
seek(dirfile);
}
else
if(findinfo.cFileName=="1.txt")
::AfxMessageBox(dirfile);

}while(::FindNextFile(find,&findinfo));
::CloseHandle(find); 
}
void CSeek1Dlg::OnOK() 
{
seek("D:");
//CDialog::OnOK();
}

解决方案 »

  1.   

    Debug后哪里出错,自己检查呀。
      

  2.   

    try
    ::SetCurrentDirectory( dirfile );
    seek( dirfile );
    ::SetCurrentDirectory( _T".." );
      

  3.   


    http://www.csdn.net/cnshare/soft/10/10117.shtm
      

  4.   


    if((strncmp(findinfo.cFileName,".",1)==0)||
      (strncmp(findinfo.cFileName,"..",2)==0))
    {
       continue;
    }
      

  5.   

    void FindFile(CString &strTemp)
    {
        WIN32_FIND_DATA fd;
        //::SetCurrentDirectory(strTemp);    HANDLE hFind = ::FindFirstFile("*.*", &fd);
        if(hFind != INVALID_HANDLE_VALUE)
        {
            do
            {
                if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                {
                    CString name = fd.cFileName;
                    if(name != _T(".") && name != _T(".."))
                    {
                        strTemp += _T("\\") + name;
                        ::SetCurrentDirectory(strTemp);
                        FindFile(strTemp);
                        ::SetCurrentDirectory(_T(".."));
                        TCHAR szCurDir[MAX_PATH];
                        ::GetCurrentDirectory(sizeof(szCurDir) / sizeof (TCHAR), szCurDir);
                        strTemp = szCurDir;
                    }
                }
                else
                {
                    CString strExt = GetExt(fd.cFileName);
                    if(m_lExt.Find(strExt))
                        AddToListCtrl(strTemp + _T("\\") + fd.cFileName, strExt);
                }        }while(::FindNextFile(hFind, &fd));        ::FindClose(hFind);
        }
    }