Compartir a través de


OpenStreamOnFileW

Hace referencia a: Outlook 2013 | Outlook 2016

Asigna e inicializa un objeto OLE IStream para acceder al contenido de un archivo. Esta función toma cadenas UNICODE como argumentos, a diferencia de la versión ANSI de esta función OpenStreamOnFile y, por tanto, permite caracteres arbitrarios en el nombre de archivo, incluida la ruta de acceso y la extensión de archivo.

Info Valor
Exportado por:
olmapi32.dll
Implementado por:
Outlook
Llamado por:
Aplicaciones cliente y proveedores de servicios
HRESULT STDMETHODCALLTYPE OpenStreamOnFileW(
  LPALLOCATEBUFFER lpAllocateBuffer,
  LPFREEBUFFER lpFreeBuffer,
  ULONG ulFlags,
  LPWSTR lpszFileName,
  LPWSTR lpszPrefix,
  LPSTREAM FAR * lppStream
);

Parameters

lpAllocateBuffer

[in] Puntero a la función MAPIAllocateBuffer , que se usará para asignar memoria.

lpFreeBuffer

[in] Puntero a la función MAPIFreeBuffer , que se usará para liberar memoria.

ulFlags

[in] Máscara de bits de marcas usadas para controlar la creación o apertura del archivo al que se va a acceder a través del objeto OLE IStream . Se pueden establecer las siguientes marcas:

SOF_UNIQUEFILENAME

Se va a crear un archivo temporal para el objeto IStream . Si se establece esta marca, también se deben establecer las marcas de STGM_CREATE y STGM_READWRITE.

STGM_CREATE

El archivo se va a crear incluso si ya existe uno. Si no se establece el parámetro lpszFileName , se deben establecer esta marca y STGM_DELETEONRELEASE. Si se establece STGM_CREATE, también se debe establecer la marca de STGM_READWRITE.

STGM_DELETEONRELEASE

El archivo se eliminará cuando se libere el objeto IStream . Si no se establece el parámetro lpszFileName , se deben establecer esta marca y STGM_CREATE.

STGM_READ

El archivo se va a crear o abrir con acceso de solo lectura.

STGM_READWRITE

El archivo se va a crear o abrir con permiso de lectura y escritura. Si no se establece esta marca, tampoco se debe establecer la marca de STGM_CREATE.

lpszFileName

[in] Nombre de archivo, incluida la ruta de acceso y la extensión, del archivo con nombre Unicode para el que OpenStreamOnFileW inicializa el objeto IStream . Si se establece la marca de SOF_UNIQUEFILENAME, lpszFileName contiene la ruta de acceso al directorio en el que se va a crear un archivo temporal. Si lpszFileName es NULL, OpenStreamOnFileW obtiene una ruta de acceso adecuada del sistema y se deben establecer las marcas de STGM_CREATE y STGM_DELETEONRELEASE.

lpszPrefix

[in] Prefijo del nombre de archivo Unicode en el que OpenStreamOnFileW inicializa el objeto IStream . Si se establece, el prefijo no debe contener más de tres caracteres. Si lpszPrefix es NULL, se usa un prefijo "SOF".

lppStream

[out] Puntero a un puntero a un objeto que expone la interfaz IStream .

Valor devuelto

S_OK

La llamada se ha realizado correctamente y devuelva el valor esperado o los valores.

MAPI_E_NO_ACCESS

No se pudo acceder al archivo debido a permisos de usuario insuficientes o porque no se pueden modificar los archivos de solo lectura.

MAPI_E_NOT_FOUND

El archivo designado no existe.

Comentarios

La función OpenStreamOnFileW tiene dos usos importantes además de controlar un archivo con un nombre Unicode, que se distingue por la configuración de la marca de SOF_UNIQUEFILENAME. Cuando no se establece esta marca, OpenStreamOnFileW abre un objeto IStream en un archivo existente, por ejemplo, para copiar su contenido en la propiedad PR_ATTACH_DATA_BIN (PidTagAttachDataBinary) de un archivo adjunto mediante el método IStream::CopyTo . En este caso, el parámetro lpszFileName especifica la ruta de acceso y el nombre de archivo del archivo.

Cuando se establece SOF_UNIQUEFILENAME, OpenStreamOnFileW crea un archivo temporal para contener datos para un objeto IStream . Para este uso, el parámetro lpszFileName puede designar opcionalmente la ruta de acceso al directorio donde se va a crear el archivo y el parámetro lpszPrefix puede especificar opcionalmente un prefijo para el nombre de archivo.

Cuando la aplicación cliente o el proveedor de servicios que realiza la llamada finalizan con el objeto IStream , debe liberarlo llamando al método OLE IStream::Release .

MAPI usa las funciones a las que apuntan lpAllocateBuffer y lpFreeBuffer para la mayoría de la asignación y desasignación de memoria, en particular para asignar memoria para su uso por las aplicaciones cliente al llamar a interfaces de objeto como IMAPIProp::GetProps e IMAPITable::QueryRows.

Notas para los llamadores

La marca de SOF_UNIQUEFILENAME se usa para crear un archivo temporal con un nombre único para el sistema de mensajería. Si se establece esta marca, el parámetro lpszFileName especifica la ruta de acceso del archivo temporal y el parámetro lpszPrefix contiene los caracteres de prefijo del nombre de archivo. El nombre de archivo construido es <el prefijo>HHHH. TMP, donde HHHH es un número hexadecimal. Si lpszFileName es NULL, el archivo se creará en el directorio de archivos temporales que se devuelve desde la función de Windows GetTempPath o en el directorio actual si no se ha designado ningún directorio de archivo temporal.

Si no se establece la marca de SOF_UNIQUEFILENAME, lpszPrefix se omite y lpszFileName debe contener la ruta de acceso completa y el nombre de archivo del archivo que se va a abrir o crear. El archivo se abrirá o creará en función de las otras marcas establecidas en ulFlags.

Vea también

OpenStreamOnFile