zoukankan      html  css  js  c++  java
  • File Operation using SHFileOperation

    SHFILEOPSTRUCT

    Original link: http://winapi.freetechsecrets.com/win32/WIN32SHFILEOPSTRUCT.htm

    Reference linke: SHFileOperation方法拷贝文件

    Contains information that the SHFileOperation function uses to perform file operations.

    typedef struct _SHFILEOPSTRUCT { // shfos

    HWND hwnd;

    UINT wFunc;

    LPCSTR pFrom;

    LPCSTR pTo;

    FILEOP_FLAGS fFlags;

    BOOL fAnyOperationsAborted;

    LPVOID hNameMappings;

    LPCSTR lpszProgressTitle;

    } SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;

    Members

    hwnd

    Handle of the dialog box to use to display information about the status of the operation.

    wFunc

    Operation to perform. This member can be one of the following values:

    FO_COPY 

    Copies the files specified by pFrom to the location specified by pTo

    FO_DELETE 

    Deletes the files specified by pFrom (pTo is ignored). 

    FO_MOVE 

    Moves the files specified by pFrom to the location specified by pTo

    FO_RENAME 

    Renames the files specified by pFrom

    pFrom

    Pointer to a buffer that specifies one or more source file names. Multiple names must be null-separated. The list of names must be double null-terminated.

    pTo

    Pointer to a buffer that contains the name of the destination file or directory. The buffer can contain mutiple destination file names if the fFlags member specifies FOF_MULTIDESTFILES. Multiple names must be null-separated. The list of names must be double null-terminated.

    fFlags

    Flags that control the file operation. This member can be a combination of the following values:

    FOF_ALLOWUNDO 

    Preserves undo information, if possible. 

    FOF_CONFIRMMOUSE 

    Not implemented. 

    FOF_FILESONLY 

    Performs the operation only on files if a wildcard filename (*.*) is specified.

    FOF_MULTIDESTFILES 

    Indicates that the pTo member specifies multiple destination files (one for each source file) rather than one directory where all source files are to be deposited. 

    FOF_NOCONFIRMATION 

    Responds with "yes to all" for any dialog box that is displayed. 

    FOF_NOCONFIRMMKDIR 

    Does not confirm the creation of a new directory if the operation requires one to be created. 

    FOF_RENAMEONCOLLISION 

    Gives the file being operated on a new name (such as "Copy #1 of...") in a move, copy, or rename operation if a file of the target name already exists.

    FOF_SILENT 

    Does not display a progress dialog box. 

    FOF_SIMPLEPROGRESS 

    Displays a progress dialog box, but does not show the filenames. 

    FOF_WANTMAPPINGHANDLE

    Fills in the hNameMappings member. The handle must be freed by using the SHFreeNameMappings function. 

    fAnyOperationsAborted

    Value that receives TRUE if the user aborted any file operations before they were completed or FALSE otherwise.

    hNameMappings

    Handle of a filename mapping object that contains an array of SHNAMEMAPPING structures. Each structure contains the old and new path names for each file that was moved, copied, or renamed. This member is used only if fFlags includes FOF_WANTMAPPINGHANDLE.

    lpszProgressTitle

    Pointer to a string to use as the title for a progress dialog box. This member is used only if fFlags includes FOF_SIMPLEPROGRESS.

    Remarks

    If pFrom or pTo are unqualified names, the current directories are taken from the global current drive and directory settings as managed by the GetCurrentDirectory and SetCurrentDirectory functions.

    See Also

    GetCurrentDirectorySetCurrentDirectorySHFileOperationSHFreeNameMappingsSHNAMEMAPPING

    __________________________________________________________________________________________

    Example:

    Copy a file to a specific path and rename it.

        TCHAR* chFrom =_T("C:\TEST\A\gg.txt");
        TCHAR* chTo=_T("C:\TEST\B\gg.txt");
        TCHAR* chNewName=_T("C:\TEST\B\new.txt");
    
        SHFILEOPSTRUCT shFileOp;
        ZeroMemory(&shFileOp, sizeof(SHFILEOPSTRUCT));
    
        shFileOp.wFunc=FO_COPY;
        shFileOp.pFrom=chFrom+'';
        shFileOp.pTo=chTo+'';
        shFileOp.fFlags=FOF_NOCONFIRMATION|FOF_SILENT;
    
        DWORD dwCopyValue= SHFileOperation (&shFileOp);
        //char buffer[32];
        //ltoa((long)dwCopyValue, buffer, 10);
    
        char procID[10];
        sprintf(procID, "%d",dwCopyValue);
    
        if(dwCopyValue!=0)
        {

      CString strMessage;

             strMessage.Format(_T("The copy operation failed. The error code of SHFileOperation is %d"), dwCopyValue);
             MessageBox(NULL, strMessage , _T("Alert"), MB_OK);

    return dwCopyValue;
        }
    
    
        shFileOp.wFunc=FO_RENAME+'';
        shFileOp.pFrom=chTo+'';
        shFileOp.pTo=chNewName+'';
    
        DWORD dwRenameValue= SHFileOperation (&shFileOp);
        if(dwRenameValue!=0)
        {
            MessageBox(NULL, _T("The rename operation failed, error code is ! "+dwRenameValue), _T("Alert"), MB_OK);
            return dwRenameValue;
        }

    Possible error code:

    Go to this link System Error Codes to see what each code means.

    1) SHFileOperation returns 124

    124 means:

    ERROR_INVALID_LEVEL

    124 (0x7C)

    The system call level is not correct.

    DE_INVALIDFILES       

    0x7C   

    The path in the source or destination or both was invalid.

    Make sure the source or destination path is valid.

    2) SHFileOperation returns 2

    ERROR_FILE_NOT_FOUND

    2 (0x2)

    The system cannot find the file specified.

    Make sure the file being operated exists.

  • 相关阅读:
    用最简单的例子理解装饰器模式(Decorator Pattern)
    用最简单的例子理解迭代器模式(Iterator Pattern)
    用最简单的例子理解观察者模式(Observer Pattern)
    用最简单的例子理解单例模式(Singleton Pattern)
    用最简单的例子理解对象为Null模式(Null Object Pattern)
    用最简单的例子理解策略模式(Strategy Pattern)
    使用Lazy<T>实现对客户订单的延迟加载
    C#关键字var是什么,在何种情况下使用
    C#中的IDisposable模式
    CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
  • 原文地址:https://www.cnblogs.com/cindy-hu-23/p/3760495.html
Copyright © 2011-2022 走看看