访问文件 I/O 缓冲区
[与此页面关联的功能 多媒体文件 I/O 是旧版功能。 它已被 源读取者取代。 源读取器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用 源读取器 而不是 多媒体文件 I/O。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
以下示例直接访问 I/O 缓冲区,以从波形音频文件读取数据。
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);
访问完文件 I/O 缓冲区后,调用 mmioSetInfo 函数,传递由 mmioGetInfo 函数填充的 MMIOINFO 结构的地址。 如果写入缓冲区,请在调用 mmioSetInfo 之前,在 MMIOINFO 结构的 dwFlags 成员中设置MMIO_DIRTY标志。 否则,缓冲区不会刷新到磁盘。