Acceso a un búfer de E/S de archivos
[La característica asociada a esta página, E/S de archivos multimedia, es una característica heredada. Se ha reemplazado por el Lector de origen. El lector de origen se ha optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use lector fuente en lugar de E /S de archivos multimedia, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
En el ejemplo siguiente se obtiene acceso a un búfer de E/S directamente para leer datos de un archivo de audio de forma de onda.
HMMIO hmmio;
MMIOINFO mmioinfo;
DWORD dwDataSize;
DWORD dwCount;
HPSTR hptr;
// Get information about the file I/O buffer.
if (mmioGetInfo(hmmio, &mmioinfo, 0))
{
Error("Failed to get I/O buffer info.");
.
.
.
mmioClose(hmmio, 0);
return;
}
// Read the entire file by directly reading the file I/O buffer.
// When the end of the I/O buffer is reached, advance the buffer.
for (dwCount = dwDataSize, hptr = lpData; dwCount 0; dwCount--)
{
// Check to see if the I/O buffer must be advanced.
if (mmioinfo.pchNext == mmioinfo.pchEndRead)
{
if(mmioAdvance(hmmio, &mmioinfo, MMIO_READ))
{
Error("Failed to advance buffer.");
.
.
.
mmioClose(hmmio, 0);
return;
}
}
// Get a character from the buffer.
*hptr++ = *mmioinfo.pchNext++;
}
// End direct buffer access and close the file.
mmioSetInfo(hmmio, &mmioinfo, 0);
mmioClose(hmmio, 0);
Cuando termine de obtener acceso a un búfer de E/S de archivo, llame a la función mmioSetInfo y pase una dirección de la estructura MMIOINFO rellenada por la función mmioGetInfo . Si escribió en el búfer, establezca la marca MMIO_DIRTY en el miembro dwFlags de la estructura MMIOINFO antes de llamar a mmioSetInfo. De lo contrario, el búfer no se vaciará en el disco.