Поделиться через


Метод 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 , указывающий папку назначения, в которую будет входить копия элемента.

[in] pszCopyName

Тип: LPCWSTR

Указатель на новое имя элемента после его копирования. Это строка Юникода с завершением NULL и может иметь значение 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
Header shobjidl_core.h (включая Shobjidl.h)

См. также раздел

IFileOperation

IFileOperation::CopyItems

PostCopyItem

PreCopyItem