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


IMAPIFolder::CopyFolder

Область применения: Outlook 2013 | Outlook 2016

Копирует или перемещает вложенную папку.

HRESULT CopyFolder(
  ULONG cbEntryID,
  LPENTRYID lpEntryID,
  LPCIID lpInterface,
  LPVOID lpDestFolder,
  LPSTR lpszNewFolderName,
  ULONG_PTR ulUIParam,
  LPMAPIPROGRESS lpProgress,
  ULONG ulFlags
);

Параметры

cbEntryID

[в] Число байтов в идентификаторе записи, на который указывает параметр lpEntryID .

lpEntryID

[в] Указатель на идентификатор записи вложенной папки для копирования или перемещения.

lpInterface

[в] Указатель на идентификатор интерфейса (IID), представляющий интерфейс, используемый для доступа к папке, на которую указывает параметр lpDestFolder . Передача NULL приводит к тому, что поставщик услуг возвращает стандартный интерфейс папок IMAPIFolder : IMAPIContainer. Допустимые значения для lpInterface : IID_IUnknown, IID_IMAPIProp, IID_IMAPIContainer и IID_IMAPIFolder.

lpDestFolder

[в] Указатель на открытую папку для получения скопированной или перемещенной вложенной папки.

lpszNewFolderName

[в] Указатель на имя скопированной или перемещенной папки в новом назначении. Если для параметра lpszNewFolderName задано значение NULL, имя исходной вложенной папки используется для имени целевой папки.

ulUIParam

[в] Дескриптор родительского окна индикатора хода выполнения. Параметр ulUIParam игнорируется, если не задан флаг FOLDER_DIALOG в параметре ulFlags .

lpProgress

[в] Указатель на объект выполнения, отображающий индикатор хода выполнения. Если в lpProgress передается значение NULL, поставщик хранилища сообщений отображает индикатор хода выполнения с помощью реализации объекта хода выполнения MAPI. Параметр lpProgress игнорируется, если флаг FOLDER_DIALOG не установлен в ulFlags.

ulFlags

[в] Битовая маска флагов, управляющая операцией копирования или перемещения. Можно задать следующие флаги:

COPY_SUBFOLDERS

Все вложенные папки в копируемых вложенных папках также должны быть скопированы. Если COPY_SUBFOLDERS не задано для операции копирования, копируется только вложенная папка, определяемая lpEntryID . При операции перемещения поведение COPY_SUBFOLDERS по умолчанию независимо от того, установлен ли флаг.

FOLDER_DIALOG

Запрашивает отображение индикатора хода выполнения.

FOLDER_MOVE

Вложенная папка должна быть перемещена, а не скопирована. Если FOLDER_MOVE не задано, вложенная папка копируется.

MAPI_DECLINE_OK

Сообщает поставщику хранилища сообщений о том, что если он реализует CopyFolder путем вызова метода IMAPISupport::D oCopyTo или IMAPISupport::D oCopyProps , CopyFolder должен немедленно вернуть MAPI_E_DECLINE_COPY.

MAPI_UNICODE

Имя целевой папки имеет формат Юникода. Если флаг MAPI_UNICODE не задан, имя папки будет в формате ANSI.

Возвращаемое значение

S_OK

Указанная папка успешно скопирована или перемещена.

MAPI_E_BAD_CHARWIDTH

Либо был установлен флаг MAPI_UNICODE, а поставщик хранилища сообщений не поддерживает Юникод, либо MAPI_UNICODE не задан, а поставщик хранилища сообщений поддерживает только Юникод.

MAPI_E_COLLISION

Имя перемещаемой или копируемых папок совпадает с именем вложенной папки в целевой папке. Поставщику хранилища сообщений требуются уникальные имена папок.

MAPI_E_DECLINE_COPY

Поставщик реализует этот метод путем вызова метода объекта поддержки, и вызывающий объект передал флаг MAPI_DECLINE_OK.

MAPI_E_FOLDER_CYCLE

Исходная папка прямо или косвенно содержит целевую папку. Возможно, значительная работа была выполнена до обнаружения этого условия, поэтому исходная и целевая папки могут быть частично изменены.

MAPI_W_PARTIAL_COMPLETION

Вызов выполнен успешно, но не все записи успешно скопированы. При возврате этого предупреждения вызов должен быть обработан как успешный. Чтобы проверить наличие этого предупреждения, используйте макрос HR_FAILED . Дополнительные сведения см. в разделе Использование макросов для обработки ошибок.

Замечания

Метод IMAPIFolder::CopyFolder копирует или перемещает вложенную папку из одного расположения в другое. Копируемые или перемещаемые вложенные папки добавляются в целевую папку как вложенная папка.

Примечания для исполнителей

Если операция копирования или перемещения включает несколько папок, о чем свидетельствует установка флага COPY_SUBFOLDERS, выполните операцию максимально полно для каждой папки. Иногда одна из перемещаемых или копируемых папок не существует или уже была перемещена или скопирована в другое место. Не прерывайте операцию преждевременно, если не произойдет сбой, не зависящий от вас, например нехватки памяти, нехватки дискового пространства или повреждения в хранилище сообщений.

Попробуйте сохранить все идентификаторы записи сообщений в скопированных сообщениях. Также следует попытаться сохранить идентификаторы записей, но это не обязательно.

Примечания для вызывающих методов

Ожидайте эти возвращаемые значения при следующих условиях.

Condition Возвращаемое значение
CopyFolder успешно скопировал или переместил каждое сообщение и вложенную папку. S_OK
CopyFolder не удалось успешно скопировать или переместить каждое сообщение и вложенную папку. MAPI_W_PARTIAL_COMPLETION или MAPI_E_NOT_FOUND
Не удалось завершить copyFolder. Любое значение ошибки, кроме MAPI_E_NOT_FOUND

Если не удается завершить CopyFolder , не предполагайте, что работа не выполнена. CopyFolder мог скопировать или переместить одно или несколько сообщений и вложенных папок до возникновения ошибки.

Если идентификатор записи для папки, которая не существует, передается в lpEntryID, CopyFolder возвращает MAPI_W_PARTIAL_COMPLETION или MAPI_E_NOT_FOUND в зависимости от реализации хранилища сообщений.

В зависимости от поставщика хранилища сообщений идентификатор записи исходного сообщения может быть сохранен в скопированном сообщении или не сохраняться. По возможности следует сохранять идентификаторы записей, но это не является обязательным требованием. Обычно можно зависеть от следующих сценариев:

  • При перемещении папки между двумя различными типами хранилищ сообщений идентификатор записи гарантированно изменится.

  • При перемещении папки между двумя хранилищами сообщений одного типа идентификатор записи почти всегда изменяется.

  • При перемещении папки в другое расположение в том же хранилище сообщений идентификатор записи может измениться или не измениться в зависимости от поставщика хранилища сообщений.

Справочные материалы по MFCMAPI

Пример кода MFCMAPI указан в приведенной ниже таблице.

Файл Функция Comment
MsgStoreDlg.cpp
CMsgStoreDlg::OnPasteFolder
MFCMAPI использует метод IMAPIFolder::CopyFolder для копирования папок из одного расположения в другое. MFCMAPI запоминает исходную папку во время операции копирования и фактически выполняет копирование во время операции вставки.

См. также

IMAPIFolder : IMAPIContainer

Mfcmapi (en) � �������� ������� ����