Accès à une mémoire tampon d’E/S de fichier
[La fonctionnalité associée à cette page, E/S de fichier multimédia, est une fonctionnalité héritée. Il a été remplacé par Lecteur source. Le lecteur source a été optimisé pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise le lecteur source au lieu des E/S de fichiers multimédias, dans la cas où cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
L’exemple suivant accède directement à une mémoire tampon d’E/S pour lire les données d’un fichier audio de forme d’onde.
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);
Lorsque vous avez terminé d’accéder à une mémoire tampon d’E/S de fichier, appelez la fonction mmioSetInfo , en passant une adresse de la structure MMIOINFO remplie par la fonction mmioGetInfo . Si vous avez écrit dans la mémoire tampon, définissez l’indicateur MMIO_DIRTY dans le membre dwFlags de la structure MMIOINFO avant d’appeler mmioSetInfo. Sinon, la mémoire tampon ne sera pas vidée sur le disque.