CopyFile只能拷单个文件。

解决方案 »

  1.   

    system(“xpocy”),记不清了
      

  2.   

    http://topic.csdn.net/u/20090422/16/e895de1c-baf8-43ef-b0a8-01915a36e649.html
    8楼
      

  3.   

    long fileSize = 0;
    void ReadFile( wchar_t* wcPathName)
    {
    wchar_t path[MAX_PATH];
    wchar_t pathTemp[MAX_PATH];
    wchar_t pathUse[MAX_PATH];
    wcscpy( pathTemp,wcPathName );
    wcscat( pathTemp,L"\\" ); WIN32_FIND_DATAW FindFileData;
    HANDLE hFind;

    wcscpy( path,pathTemp );
    wcscat( path,L"*.*" ); hFind = ::FindFirstFileW( path, &FindFileData);
    if (hFind == INVALID_HANDLE_VALUE) 
    {
    return;
    }else 
    {
    if ( wcscmp(FindFileData.cFileName,L".") != 0 &&
    wcscmp(FindFileData.cFileName,L"..") != 0 &&
    !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的第一個文件:如果不是 . ..,也不是文件夾(是文件)
    {
    wcscpy( pathUse,pathTemp );
    wcscat( pathUse,FindFileData.cFileName );
    HANDLE handle = CreateFileW( pathUse, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    if (handle != INVALID_HANDLE_VALUE)
    {
    fileSize += GetFileSize(handle, NULL)/1024;
    CloseHandle(handle);
    }
    }else if(  wcscmp(FindFileData.cFileName,L".") != 0 &&
       wcscmp(FindFileData.cFileName,L"..") != 0 &&
       (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的第一個文件:如果是文件夾,進入遞歸
    {
    wcscpy( pathUse,pathTemp );
    wcscat( pathUse,FindFileData.cFileName );
    wchar_t temp[MAX_PATH];
    wcscpy( temp,pathUse );
    ReadFile( pathUse );
    } while ( 0 != ::FindNextFileW(hFind,&FindFileData) )
    {
    if ( wcscmp(FindFileData.cFileName,L".") != 0 &&
    wcscmp(FindFileData.cFileName,L"..") != 0 &&
    !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
    {
    wcscpy( pathUse,pathTemp );
    wcscat( pathUse,FindFileData.cFileName );
    HANDLE handle = CreateFileW( pathUse, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    if (handle != INVALID_HANDLE_VALUE)
    {
    fileSize += GetFileSize(handle, NULL)/1024;
    CloseHandle(handle);
    }
    }else if( wcscmp(FindFileData.cFileName,L".") != 0 &&
      wcscmp(FindFileData.cFileName,L"..") != 0 &&
          (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的下一個文件:如果是文件夾,進入遞歸
    {
    wcscpy( pathUse,pathTemp );
    wcscat( pathUse,FindFileData.cFileName );
    wchar_t temp[MAX_PATH];
    wcscpy( temp,pathUse );
    ReadFile( temp );
    }
    }
    FindClose(hFind);
    }
    }以上是遞歸獲取一個文件夾大小的方法。你只要在找到文件的時候做copy動作就可以了。
    代碼是unicode編程,亂碼文件也能計算在內。
    再給你個非unicode的。
    long fileSize;
    void ReadFile( CString path)
    {
    CFileFind finder;
    BOOL res = finder.FindFile(path);
    while(res)
    {
    res=finder.FindNextFile();
    if(!finder.IsDots()&&!finder.IsDirectory()){
    CString fileN = finder.GetFileName();
    CString path2 = path1;
    path2 += fileN; //具體文件的全路徑

    HANDLE handle = CreateFile( path2, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    if (handle != INVALID_HANDLE_VALUE)
    {
    fileSize += GetFileSize(handle, NULL)/1024;
    CloseHandle(handle);
    }
    }
    else
    {
    if(finder.IsDots())
    continue;
    else if(finder.IsDirectory())
    {
    path=finder.GetFilePath();
    ReadFile(path);
    }
    }
    }
    finder.Close();
    }