OpenStreamOnFile
Область применения: Outlook 2013 | Outlook 2016
Выделяет и инициализирует объект OLE IStream для доступа к содержимому файла. Эта функция принимает строку ANSI в качестве имени файла, включая путь и расширение файла, поэтому рекомендуется использовать версию в Юникоде этой функции OpenStreamOnFileW.
Элемент | Value (Значение) |
---|---|
Файл заголовка: |
Mapiutil.h |
Реализовано в: |
MAPI |
Вызывающая сторона: |
Клиентские приложения и поставщики услуг |
HRESULT STDMETHODCALLTYPE OpenStreamOnFile(
LPALLOCATEBUFFER lpAllocateBuffer,
LPFREEBUFFER lpFreeBuffer,
ULONG ulFlags,
LPSTR lpszFileName,
LPSTR lpszPrefix,
LPSTREAM FAR * lppStream
);
Параметры
lpAllocateBuffer
[в] Указатель на функцию MAPIAllocateBuffer , используемую для выделения памяти.
lpFreeBuffer
[в] Указатель на функцию MAPIFreeBuffer , которая будет использоваться для освобождения памяти.
ulFlags
[в] Битовая маска флагов, используемая для управления созданием или открытием файла, доступ к которым осуществляется через объект OLE IStream . Можно задать следующие флаги:
SOF_UNIQUEFILENAME
Для объекта IStream необходимо создать временный файл. Если этот флаг установлен, также следует задать флаги STGM_CREATE и STGM_READWRITE.
STGM_CREATE
Файл должен быть создан, даже если он уже существует. Если параметр lpszFileName не задан, необходимо задать как этот флаг, так и STGM_DELETEONRELEASE. Если STGM_CREATE задано, необходимо также задать флаг STGM_READWRITE.
STGM_DELETEONRELEASE
Файл удаляется при освобождении объекта IStream . Если параметр lpszFileName не задан, необходимо задать как этот флаг, так и STGM_CREATE.
STGM_READ
Файл должен быть создан или открыт с доступом только для чтения.
STGM_READWRITE
Файл должен быть создан или открыт с разрешением на чтение и запись. Если этот флаг не задан, флаг STGM_CREATE также не должен быть установлен.
lpszFileName
[в] Имя файла, включая путь и расширение, файла, для которого OpenStreamOnFile инициализирует объект IStream . Если флаг SOF_UNIQUEFILENAME установлен, lpszFileName содержит путь к каталогу, в котором создается временный файл. Если lpszFileName имеет значение NULL, OpenStreamOnFile получает соответствующий путь от системы, и необходимо задать флаги STGM_CREATE и STGM_DELETEONRELEASE.
lpszPrefix
[в] Префикс для имени файла, для которого OpenStreamOnFile инициализирует объект IStream . Если задано значение , префикс должен содержать не более трех символов. Если lpszPrefix имеет значение NULL, используется префикс SOF.
lppStream
[out] Указатель на указатель на объект, предоставляющий интерфейс IStream .
Возвращаемое значение
S_OK
����� ������� � ������ ��������� ��������� ��� ��������.
MAPI_E_NO_ACCESS
Не удалось получить доступ к файлу из-за недостаточных разрешений пользователя или из-за невозможности изменения файлов только для чтения.
MAPI_E_NOT_FOUND
Указанный файл не существует.
Замечания
Функция OpenStreamOnFile имеет два важных варианта использования, отличающихся настройкой флага SOF_UNIQUEFILENAME. Если этот флаг не задан, OpenStreamOnFile открывает объект IStream в существующем файле, например для копирования его содержимого в свойство PR_ATTACH_DATA_BIN (PidTagAttachDataBinary) вложения с помощью метода IStream::CopyTo . В этом случае параметр lpszFileName указывает путь и имя файла.
Если SOF_UNIQUEFILENAME задано, OpenStreamOnFile создает временный файл для хранения данных для объекта IStream . Для этого использования параметр lpszFileName может при необходимости указать путь к каталогу, в котором должен быть создан файл, а параметр lpszPrefix может при необходимости указать префикс для имени файла.
Когда вызывающее клиентское приложение или поставщик услуг завершает работу с объектом IStream , он должен освободить его, вызвав метод OLE IStream::Release .
MAPI использует функции, на которые указывают lpAllocateBuffer и lpFreeBuffer , для выделения памяти и освобождения, в частности для выделения памяти для использования клиентскими приложениями при вызове интерфейсов объектов, таких как IMAPIProps::GetProps и IMAPITable::QueryRows.
Примечания для вызывающих методов
Флаг SOF_UNIQUEFILENAME используется для создания временного файла с именем, уникальным для системы обмена сообщениями. Если этот флаг задан, параметр lpszFileName определяет путь к временному файлу, а параметр lpszPrefix содержит символы префикса имени файла. Созданное имя файла является <префиксом>HHHH. TMP, где HHHH — шестнадцатеричное число. Если lpszFileName имеет значение NULL, файл будет создан во временном каталоге файлов, возвращаемом функцией Windows GetTempPath, или в текущем каталоге, если временный каталог файлов не был назначен.
Если флаг SOF_UNIQUEFILENAME не задан, lpszPrefix игнорируется, а lpszFileName должен содержать полный путь и имя файла, который необходимо открыть или создать. Файл будет открыт или создан на основе других флагов, установленных в ulFlags.
Справочные материалы по MFCMAPI
Пример кода MFCMAPI указан в приведенной ниже таблице.
Файл | Функция | Comment |
---|---|---|
File.cpp |
WriteAttachStreamToFile |
MFCMAPI использует метод OpenStreamOnFile для открытия потока в файле, чтобы в него можно было записать вложение. |