如何编程实现从一个目录到另一个目录的拷贝(包括子目录及所有文件)?谁有例子100分

解决方案 »

  1.   

    无法直接进行目录拷贝,我给你一个递归的文件拷贝函数,自己研究一下吧!如下:
    void FolderFileCopy(CString strSource,CString strDestin)
    {
    CString strNewPath(strSource);
    CString strNew;
    CString strDestFile;
    CString strTemp;
    CString strSection;
    CString strKey;
    CString strName;
    HANDLE hFile;
    WIN32_FIND_DATA wfd; if(strNewPath == "")
    return; strNewPath += "\\*.*";
    hFile = ::FindFirstFile(strNewPath,&wfd);
    if( hFile == INVALID_HANDLE_VALUE )
    return; do
    {
    if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    strName.Format("%s",wfd.cFileName);
    if(lstrcmp(wfd.cFileName,".") == 0 || lstrcmp(wfd.cFileName,"..") == 0)
    continue;
    strNew = strNewPath;
    strNew = strNew.Left(strNew.GetLength()-3);
    strNew += strName;
    strTemp = strDestin + "\\" + strName;
    ::CreateDirectory(strTemp,NULL);
    FolderFileCopy(strNew,strTemp);
    }
    else if(((wfd.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM)) == 0))
    {
    strName.Format("%s",wfd.cFileName);
    strNew = strNewPath;
    strNew = strNew.Left(strNew.GetLength()-3);
    strTemp = strNew + strName;
    strDestFile = strDestin + "\\" + strName;
    ::CopyFile(strTemp,strDestFile,TRUE);
    }
    }while(::FindNextFile(hFile,&wfd));
    FindClose(hFile);
    }
      

  2.   

    thank guoxing(狼):
    我完善了一下,如下:
    void CFileServerView::FolderFileCopy(CString strSource,CString strDestin)
    {
    CString strNewPath(strSource);
    CString strNew;
    CString strDestFile;
    CString strTemp;
    CString strSection;
    CString strKey;
    CString strName;
    HANDLE hFile;
    WIN32_FIND_DATA wfd; if(strNewPath == "")
    {
    m_Log.WriteLogContent("源文件名为空,无法进行拷贝!");
    return;
    } strNewPath += "\\*.*";
    hFile = ::FindFirstFile(strNewPath,&wfd);
    if( hFile == INVALID_HANDLE_VALUE )
    {
    CString logstr;
    logstr.Format("源文件名(%s)句柄错误,无法进行拷贝!请检查注册表或共享!",strNewPath);
    m_Log.WriteLogContent(logstr);
    return;
    } CreateDirectory(strDestin,NULL); do
    {
    if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    strName.Format("%s",wfd.cFileName);
    if(lstrcmp(wfd.cFileName,".") == 0 || lstrcmp(wfd.cFileName,"..") == 0)
    continue;
    strNew = strNewPath;
    strNew = strNew.Left(strNew.GetLength()-3);
    strNew += strName;
    strTemp = strDestin + "\\" + strName;
    ::CreateDirectory(strTemp,NULL);
    FolderFileCopy(strNew,strTemp);
    continue;
    } strName.Format("%s",wfd.cFileName);
    strNew = strNewPath;
    strNew = strNew.Left(strNew.GetLength()-3);
    strTemp = strNew + strName;
    strDestFile = strDestin + "\\" + strName; CFileStatus rStatus;
    if (CFile::GetStatus(strDestFile,rStatus) != 0 )
    {//if file exist,set read_only to read!otherwise access error!
    rStatus.m_attribute= 0x00;
    CFile::SetStatus(strDestFile,rStatus);
    } BOOL bSuccess = ::CopyFile(strTemp,strDestFile,FALSE);
    CString logstr;
    if(bSuccess)
    {
    logstr.Format("从源(%s)到目的(%s)拷贝文件成功!",strTemp,strDestFile);
    m_Log.WriteLogContent(logstr);
    }
    else
    {
    DWORD ret = GetLastError();
    logstr.Format("从源(%s)到目的(%s)拷贝文件失败!errorcode=%d.",strTemp,strDestFile,ret);
    m_Log.WriteLogContent(logstr);
    continue;
    }
    }while(::FindNextFile(hFile,&wfd)); FindClose(hFile);
    Sleep(1);
    }好,到此结帖!