SlideShare a Scribd company logo
1 of 5
Функции для работы с файлами
Методы сжатия файлов изображений
Библиотека mmsystem.dll содержит удобные функции, специально предназначенные для работы с файлами RIFF-формата. Специализированные функции
успешно работают с блоками памяти большого размера (более 64 Кбайт), так как звуковые данные редко помещаются в одном сегменте памяти.
Открытие файла совершается функцией mmioOpen. Эта функция может открыть файл для буферизованного или небуферизованного ввода или для работы с
файлом в оперативной памяти (полностью возможности указанной функции приведены в поставляемой совместно с MS SDK документации). Ниже приведен прототип
функции mmioOpen:
HMMIO
mmioOpen(LPSTR szFilename,
LPMMIOINFO lpmmioinfo,
DWORD dwOpenFlags);
Здесь szFilename - дальний указатель на текстовую строку, содержащую путь к открываемому файлу, lpmmioinfo - указатель на содержащую
дополнительные параметры для операции открытия файла структуру MMIOINFO, dwOpenFlags - определяющие режим открытия файла флаги.
При успехе функция mmioOpen возвращает (нестандартный) идентификатор открытого файла, который можно использовать только в функциях с префиксом
mmio. Код ошибки можно определить, анализируя поле wErrorRet структуры MMIOINFO.
Структура MMIOINFO дает возможность задавать многочисленные способы работы с файлами - можно использовать
файлы в памяти, можно определить собственную процедуру для выполнения нестандартного ввода или вывода или
работать с открытыми средствами MS-DOS идентификаторами файлов. В простейших случаях можно указать второй
параметр функции mmioOpen как NULL и не использовать структуру MMIOINFO вообще.
Для создания нового фрагмента в RIFF-формате удобно использовать функцию
mmioCreateChunk; новый фрагмент создается в текущей позиции файла, предварительно
открытого с помощью функции mmioOpen
UINT
mmioCreateChunk(HMMIO hmmio, // идентификатор файла
LPMMCKINFO lpck, // указатель на
// структуру MMCKINFO
UINT wFlags); // тип фрагмента
При wFlags=MMIO_CREATERIFF создается фрагмент RIFF, при
wFlags=MMIO_CREATELIST создается фрагмент LIST. При нормальном завершении
работы функция возвращает нулевое значение, в противном случае - код ошибки.
Структура MMCKINFO и указатели на нее определены в файле mmsystem.h
как
typedef struct _MMCKINFO
{
FOURCC ckid;
DWORD cksize;
FOURCC fccType;
DWORD dwDataOffset;
DWORD dwFlags;
} MMCKINFO;
typedef MMCKINFO *PMMCKINFO;
typedef MMCKINFO NEAR *NPMMCKINFO:
typedef MMCKINFO FAR *LPMMCKINFO;
Функция mmioDescend
С целью поиска нужного фрагмента внутри RIFF-файла нет необходимости выполнять побайтное чтение файла и анализ его внутренней структуры; найти необходимый фрагмент
и выполнить позиционирование относительно этого фрагмента можно с помощью функций mmioDescend и mmioAscend. Функция mmioDescend ищет заданный фрагмент начиная с текущей
позиции; при нахождении фрагмента текущая позиция будет установлена на область данных.
UINT
mmioDescend(HMMIO hmmio, // идентификатор файла
LPMMCKINFO lpck, // указатель на структуру
// MMCKINFO для
// текущего фрагмента
LPMMCKINFO lpckParent, // указатель на стр-ру
// MMCKINFO для
// внешнего фрагмента
UINT wFlags); // режим поиска
Здесь lpckParent - указатель на структуру MMCKINFO, описывающую внешний фрагмент, внутри которого выполняется поиск. В качестве внешнего фрагмента могут выступать
только фрагменты ‘RIFF’ или ‘LIST’; если внешний фрагмент отсутствует, этот параметр можно указывать как NULL. Если указан wFlags=MMIO_FINDCHUNK, выполняется поиск
фрагмента, заданного своим идентификатором, если wFlags=MMIO_FINDLIST - выполняется поиск фрагмента внутри фрагмента ‘LIST’, при wFlags=MMIO_FINDRIFF - внутри фрагмента
‘RIFF’. При нормальном завершении функция mmioDescend возвращает нулевое значение, в противном случае - код ошибки.

8.pptx

  • 1. Функции для работы с файлами Методы сжатия файлов изображений
  • 2. Библиотека mmsystem.dll содержит удобные функции, специально предназначенные для работы с файлами RIFF-формата. Специализированные функции успешно работают с блоками памяти большого размера (более 64 Кбайт), так как звуковые данные редко помещаются в одном сегменте памяти. Открытие файла совершается функцией mmioOpen. Эта функция может открыть файл для буферизованного или небуферизованного ввода или для работы с файлом в оперативной памяти (полностью возможности указанной функции приведены в поставляемой совместно с MS SDK документации). Ниже приведен прототип функции mmioOpen: HMMIO mmioOpen(LPSTR szFilename, LPMMIOINFO lpmmioinfo, DWORD dwOpenFlags); Здесь szFilename - дальний указатель на текстовую строку, содержащую путь к открываемому файлу, lpmmioinfo - указатель на содержащую дополнительные параметры для операции открытия файла структуру MMIOINFO, dwOpenFlags - определяющие режим открытия файла флаги. При успехе функция mmioOpen возвращает (нестандартный) идентификатор открытого файла, который можно использовать только в функциях с префиксом mmio. Код ошибки можно определить, анализируя поле wErrorRet структуры MMIOINFO.
  • 3. Структура MMIOINFO дает возможность задавать многочисленные способы работы с файлами - можно использовать файлы в памяти, можно определить собственную процедуру для выполнения нестандартного ввода или вывода или работать с открытыми средствами MS-DOS идентификаторами файлов. В простейших случаях можно указать второй параметр функции mmioOpen как NULL и не использовать структуру MMIOINFO вообще.
  • 4. Для создания нового фрагмента в RIFF-формате удобно использовать функцию mmioCreateChunk; новый фрагмент создается в текущей позиции файла, предварительно открытого с помощью функции mmioOpen UINT mmioCreateChunk(HMMIO hmmio, // идентификатор файла LPMMCKINFO lpck, // указатель на // структуру MMCKINFO UINT wFlags); // тип фрагмента При wFlags=MMIO_CREATERIFF создается фрагмент RIFF, при wFlags=MMIO_CREATELIST создается фрагмент LIST. При нормальном завершении работы функция возвращает нулевое значение, в противном случае - код ошибки. Структура MMCKINFO и указатели на нее определены в файле mmsystem.h как typedef struct _MMCKINFO { FOURCC ckid; DWORD cksize; FOURCC fccType; DWORD dwDataOffset; DWORD dwFlags; } MMCKINFO; typedef MMCKINFO *PMMCKINFO; typedef MMCKINFO NEAR *NPMMCKINFO: typedef MMCKINFO FAR *LPMMCKINFO;
  • 5. Функция mmioDescend С целью поиска нужного фрагмента внутри RIFF-файла нет необходимости выполнять побайтное чтение файла и анализ его внутренней структуры; найти необходимый фрагмент и выполнить позиционирование относительно этого фрагмента можно с помощью функций mmioDescend и mmioAscend. Функция mmioDescend ищет заданный фрагмент начиная с текущей позиции; при нахождении фрагмента текущая позиция будет установлена на область данных. UINT mmioDescend(HMMIO hmmio, // идентификатор файла LPMMCKINFO lpck, // указатель на структуру // MMCKINFO для // текущего фрагмента LPMMCKINFO lpckParent, // указатель на стр-ру // MMCKINFO для // внешнего фрагмента UINT wFlags); // режим поиска Здесь lpckParent - указатель на структуру MMCKINFO, описывающую внешний фрагмент, внутри которого выполняется поиск. В качестве внешнего фрагмента могут выступать только фрагменты ‘RIFF’ или ‘LIST’; если внешний фрагмент отсутствует, этот параметр можно указывать как NULL. Если указан wFlags=MMIO_FINDCHUNK, выполняется поиск фрагмента, заданного своим идентификатором, если wFlags=MMIO_FINDLIST - выполняется поиск фрагмента внутри фрагмента ‘LIST’, при wFlags=MMIO_FINDRIFF - внутри фрагмента ‘RIFF’. При нормальном завершении функция mmioDescend возвращает нулевое значение, в противном случае - код ошибки.