IFileOperation::CopyItem 方法 (shobjidl_core.h)

声明要复制到指定目标的单个项。

语法

HRESULT CopyItem(
  [in] IShellItem                 *psiItem,
  [in] IShellItem                 *psiDestinationFolder,
  [in] LPCWSTR                    pszCopyName,
  [in] IFileOperationProgressSink *pfopsItem
);

参数

[in] psiItem

类型: IShellItem*

指向指定源项的 IShellItem 的指针。

[in] psiDestinationFolder

类型: IShellItem*

指向 IShellItem 的指针,该 IShellItem 指定要包含项目副本的目标文件夹。

[in] pszCopyName

类型: LPCWSTR

指向复制后项的新名称的指针。 这是以 null 结尾的 Unicode 字符串,可以为 NULL。 如果 为 NULL,则目标项的名称与源相同。

[in] pfopsItem

类型: IFileOperationProgressSink*

指向 IFileOperationProgressSink 对象的指针,该对象用于此特定复制操作的进度状态和错误通知。 如果为整个操作调用 IFileOperation::Advise ,则会包含复制操作的进度状态和错误通知,因此请将此参数设置为 NULL

返回值

类型: HRESULT

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

此方法不复制项,而只是声明要复制的项。 若要复制对象,必须至少进行此处详述的调用序列:

  1. 调用 IFileOperation::CopyItem 以声明源项、目标文件夹和目标名称。
  2. 调用 IFileOperation::P erformOperations 以开始复制操作。

示例

以下示例代码演示此方法的示例实现。

HRESULT CopyItem(__in PCWSTR pszSrcItem, __in PCWSTR pszDest, PCWSTR pszNewName)
{
    //
    // Initialize COM as STA.
    //
    HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); 
    if (SUCCEEDED(hr))
    {
        IFileOperation *pfo;
  
        //
        // Create the IFileOperation interface 
        //
        hr = CoCreateInstance(CLSID_FileOperation, 
                              NULL, 
                              CLSCTX_ALL, 
                              IID_PPV_ARGS(&pfo));
        if (SUCCEEDED(hr))
        {
            //
            // Set the operation flags. Turn off all UI from being shown to the
            // user during the operation. This includes error, confirmation,
            // and progress dialogs.
            //
            hr = pfo->SetOperationFlags(FOF_NO_UI);
            if (SUCCEEDED(hr))
            {
                //
                // Create an IShellItem from the supplied source path.
                //
                IShellItem *psiFrom = NULL;
                hr = SHCreateItemFromParsingName(pszSrcItem, 
                                                 NULL, 
                                                 IID_PPV_ARGS(&psiFrom));
                if (SUCCEEDED(hr))
                {
                    IShellItem *psiTo = NULL;
  
                    if (NULL != pszDest)
                    {
                        //
                        // Create an IShellItem from the supplied 
                        // destination path.
                        //
                        hr = SHCreateItemFromParsingName(pszDest, 
                                                         NULL, 
                                                         IID_PPV_ARGS(&psiTo));
                    }
                    
                    if (SUCCEEDED(hr))
                    {
                        //
                        // Add the operation
                        //
                        hr = pfo->CopyItem(psiFrom, psiTo, pszNewName, NULL);

                        if (NULL != psiTo)
                        {
                            psiTo->Release();
                        }
                    }
                    
                    psiFrom->Release();
                }
                
                if (SUCCEEDED(hr))
                {
                    //
                    // Perform the operation to copy the file.
                    //
                    hr = pfo->PerformOperations();
                }        
            }
            
            //
            // Release the IFileOperation interface.
            //
            pfo->Release();
        }
  
        CoUninitialize();
    }
    return hr;
}

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 shobjidl_core.h (包括 Shobjidl.h)

另请参阅

IFileOperation

IFileOperation::CopyItems

PostCopyItem

PreCopyItem