Поделиться через


Доступ к буферу файлового ввода-вывода

[Функция, связанная с этой страницей, мультимедийные операции ввода-вывода файлов, является устаревшей функцией. Она была заменена средством чтения исходного кода. Средство чтения источника оптимизировано для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде средство чтения исходного кода вместо операций ввода-вывода мультимедийных файлов, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

В следующем примере напрямую обращается к буферу ввода-вывода для чтения данных из файла waveform-audio.

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); 

Завершив доступ к буферу ввода-вывода файла, вызовите функцию mmioSetInfo , передав адрес структуры MMIOINFO , заполненной функцией mmioGetInfo . При записи в буфер задайте флаг MMIO_DIRTY в элементе dwFlags структуры MMIOINFO перед вызовом mmioSetInfo. В противном случае буфер не будет сбрасываться на диск.