可以使用API SHFileOperation
The following sample console application illustrates the use of SHFileOperation to copy files from one directory to another. The source and destination directories, C:\My_Docs and C:\My_Docs2, are hard-coded into the application for simplicity.#include <shlobj.h>
#include <shlwapi.h>main()
{
    IShellFolder *psfDeskTop = NULL;
    IShellFolder *psfDocFiles = NULL;
    IMalloc *pMalloc = NULL;
    LPITEMIDLIST pidlDocFiles = NULL;
    LPITEMIDLIST pidlItems = NULL;
    IEnumIDList *ppenum = NULL;
    SHFILEOPSTRUCT sfo;
    STRRET strDispName;
    TCHAR szParseName[MAX_PATH];
    TCHAR szSourceFiles[256];
    int i;
    int iBufPos = 0;
    ULONG chEaten;
    ULONG celtFetched;
    HRESULT hr;    pzSourceFiles[0] = '\0';
    hr = SHGetMalloc(&pMalloc);
    hr = SHGetDesktopFolder(&psfDeskTop);    hr = psfDeskTop->ParseDisplayName(NULL, NULL, L"c:\\My_Docs", 
         &chEaten, &pidlDocFiles, NULL);
    hr = psfDeskTop->BindToObject(pidlDocFiles, NULL, IID_IShellFolder, 
         (LPVOID *) &psfDocFiles);
    hr = psfDeskTop->Release();    hr = psfDocFiles->EnumObjects(NULL,SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, 
         &ppenum);    while( (hr = ppenum->Next(1,&pidlItems, &celtFetched)) == S_OK 
       && (celtFetched) == 1)
    {
        psfDocFiles->GetDisplayNameOf(pidlItems, SHGDN_FORPARSING, 
            &strDispName);
        StrRetToBuf(&strDispName, pidlItems, szParseName, MAX_PATH);
        for(i=0;i<=lstrlen(szParseName); i++)
        {
            szSourceFiles[iBufPos++] = szParseName[i];
        }
        pMalloc->Free(pidlItems);
    }
ppenum->Release();

    szSourceFiles[iBufPos] = '\0';    sfo.hwnd = NULL;
    sfo.wFunc = FO_COPY;
    sfo.pFrom = szSourceFiles;
    sfo.pTo = "c:\\My_Docs2\0";
    sfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;    hr = SHFileOperation(&sfo);

    SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH, (LPCVOID) "c:\My_Docs2", 0);    pMalloc->Free(pidlDocFiles);
    psfDocFiles->Release();    return 0;
}

解决方案 »

  1.   

    AreFileApisANSI
    CancelIO
    CopyFile
    CopyFileEx
    CopyProgressRoutine
    CreateDirectory
    CreateDirectoryEx
    CreateFile
    CreateIoCompletionPort
    DefineDosDevice
    DeleteFile
    FileIOCompletionRoutine
    FindClose
    FindCloseChangeNotification
    FindFirstChangeNotification
    FindFirstFile
    FindFirstFileEx
    FindNextChangeNotification
    FindNextFile
    FlushFileBuffers
    GetBinaryType
    GetCompressedFileSize
    GetCurrentDirectory
    GetDiskFreeSpace
    GetDiskFreeSpaceEx
    GetDriveType
    GetFileAttributes
    GetFileAttributesEx
    GetFileInformationByHandle
    GetFileSize
    GetFileType
    GetFullPathName
    GetLogicalDrives
    GetLogicalDriveStrings
    GetQueuedCompletionStatus
    GetShortPathName
    GetTempFileName
    GetTempPath
    GetVolumeInformation
    LockFile
    LockFileEx
    MoveFile
    MoveFileEx
    PostQueuedCompletionStatus
    QueryDosDevice
    ReadDirectoryChangesW
    ReadFile
    ReadFileEx
    RemoveDirectory
    SearchPath
    SetCurrentDirectory
    SetEndOfFile
    SetFileApisToANSI
    SetFileApisToOEM
    SetFileAttributes
    SetFilePointer
    SetVolumeLabel
    UnlockFile
    UnlockFileEx
    WriteFile
    WriteFileEx