Мультимедиа для Windows

         

Открытие файла



Открытие файла

Для открытия файла предназначена функция mmioOpen , прототип которой есть в файле mmsystem.h. Эта функция может открывать файл для буферизованного или небуферизованного ввода, файл в оперативной памяти. Она может работать с файлами, уже открытыми средствами MS-DOS или использовать дополнительные функции для выполнения нестандартных процедур ввода/вывода. Из-за ограниченного объема книги мы сможем рассмотреть только основные возможности функции mmioOpen, более подробное описание вы сможете найти в документации, которая поставляется вместе с Microsoft SDK. Функция mmioOpen HMMIO mmioOpen( LPSTR szFilename, // путь к файлу LPMMIOINFO lpmmioinfo, // указатель на структуру MMIOINFO DWORD dwOpenFlags); // флаги для операции открытия

Параметры функции: szFilename

Дальний указатель на текстовую строку, содержащую путь к открываемому файлу lpmmioinfo

Указатель на структуру MMIOINFO, которая содержит дополнительные параметры для операции открытия файла. Может быть задан как NULL


dwOpenFlags

Флаги, определяющие режим открытия файла

Возвращаемое значение:

При успехе возвращается идентификатор открытого файла. Этот идентификатор можно использовать только в функциях с префиксом имени mmio. В случае ошибки возвращается значение NULL. Код ошибки можно определить из поля wErrorRet структуры MMIOINFO

Формат структуры MMIOINFO описан в файле mmsystem.h: typedef struct _MMIOINFO { // Поля общего назначения DWORD dwFlags; // общий флаг состояния FOURCC fccIOProc; // код идентификации // процедуры ввода/вывода LPMMIOPROC pIOProc; // указатель на процедуру ввода/вывода UINT wErrorRet; // код завершения HTASK htask; // идентификатор локальной процедуры // ввода/вывода // Поля для буферизованного ввода/вывода LONG cchBuffer; // размер буфера или 0L HPSTR pchBuffer; // начало буфера или NULL HPSTR pchNext; // указатель на следующий байт для // чтения или записи HPSTR pchEndRead; // указатель на последний прочитанный // байт HPSTR pchEndWrite;// указатель на последний // записанный байт LONG lBufOffset; // дисковое смещение начала буфера // Поля для процедур ввода/вывода LONG lDiskOffset; // дисковое смещение для следующей // операции чтения или записи DWORD adwInfo[3]; // дополнительные данные для типа MMIOPROC // Прочие поля DWORD dwReserved1; // зарезервировано DWORD dwReserved2; // зарезервировано HMMIO hmmio; // идентификатор открытого файла } MMIOINFO; typedef MMIOINFO *PMMIOINFO; typedef MMIOINFO NEAR *NPMMIOINFO; typedef MMIOINFO FAR *LPMMIOINFO;

Структура MMIOINFO позволяет задать многочисленные способы работы с файлами. Можно использовать файлы в памяти, можно определить собственную процедуру для выполнения нестандартного ввода или вывода или работать с идентификаторами файлов, открытых средствами MS-DOS. В простых случаях вы можете указать второй параметр функции mmioOpen как NULL и не использовать структуру MMIOINFO вообще: hmmio = mmioOpen((LPSTR)lpszFileName, NULL, MMIO_READ | MMIO_ALLOCBUF);

Последний параметр функции mmioOpen предназначен для определения режима открытия файла в виде логической комбинации ИЛИ отдельных флагов. Приведем список флагов.

ФлагОписание режима открытия файла
MMIO_READ Чтение
MMIO_WRITE Запись
MMIO_READWRITE Чтение и запись
MMIO_CREATE Создание нового файла. Если файл с таким именем уже есть, он обрезается до нулевой длины
MMIO_DELETE Удаление файла. Если удаление выполнено без ошибок, возвращается значение TRUE, в противном случае - FALSE
MMIO_PARSE Создание текстовой строки, содержащей полный путь к файлу на базе пути, переданного функции через параметр szFilename. Результат помещается обратно в буфер szFilename
MMIO_EXIST Определяется, существует ли указанный файл, и если существует, для него создается текстовая строка, содержащая полный путь к файлу
MMIO_ALLOCBUF Файл будет открыт для буферизованного ввода/вывода. По умолчанию буфер имеет размер 8 Кбайт. Приложение может изменить размер буфера, указав его в поле cchBuffer в структуре MMIOINFO
MMIO_COMPAT Файл будет открыт в режиме совместимости. В этом режиме он может быть открыт несколько раз
MMIO_EXCLUSIVE Файл будет открыт в монопольном режиме
MMIO_DENYWRITE Другим приложениям запрещено открывать файл на запись
MMIO_DENYREAD Другим приложениям запрещено открывать файл на чтение
MMIO_DENYNONE Другие приложения могут открывать файл и на запись, и на чтение
MMIO_GETTEMP Создание текстовой строки для открытия временного файла. Текстовая строка будет записана в буфер, адрес которого передается через первый параметр. Открытие файла не выполняется

В следующем фрагменте кода выполняется создание файла, который открывается и на запись, и на чтение: hFile = mmioOpen(szFileName, NULL, MMIO_CREATE | MMIO_READWRITE);



Содержание    Назад    Вперед