Главная
страница 1страница 2 ... страница 6страница 7

Лекция 09
Ввод-вывод с использованием WinAPI

Содержание:


09.00. Аннотация.

09.01. Файловые операции ввода-вывода с использованием WinAPI

09.02. Пример создания «каркаса» приложения средствами WinAPI в C++

09.03. Резюме

09.04. Вопросы и упражнения.

09.05. Г Л О С С А Р И Й

09.06. Приложение № I

09.07. Приложение № II

09.08. Приложение № III

09.09. Приложение № IV

09.10. Приложение № V

09.11. Приложение № VI


09.00. Аннотация.


На этой лекции Вы познакомитесь с файловыми операциями ввода-вывода с использованием API Windows, а также научитесь программировать «каркас» приложения Windows по предложенным автором шаблонам. Это поможет Вам впоследствии легко создавать простейшие программы Windows.

09.01. Файловые операции ввода-вывода
с использованием WinAPI

Содержание


09.01.01. Особенности файловых операций в Microsoft Windows

09.01.02. Функции создания и закрытия файлов методами Win API

09.01.03. Функции чтения-записи в файл

09.01.04. Стандартные «диалоги» открытия и сохранения файлов

09.01.01. Особенности файловых операций в Microsoft Windows
=== *** === *** ===

Файловые операции в операционной системе Microsoft Windows отличаются от файловых операций MS-DOS следующим:



  1. Заявлена переносимость всех файловых операций в операционных системах MS Windows на последующие версии. Это значит, что если строго следовать рекомендациям Microsoft Windows в описании её файловых функций, программа будет «эффективно компилироваться» как для платформы Win16, так и для платформы Win32 и Win64;

  2. Указанные ниже функции позволяют создавать текстовые файлы размером как до 64 Кбайт, так и до 2 Гбайт (напомню, что в MS-DOS максимальный размер текстового файла – 64 Кбайт);

  3. Имена файлов теперь могут писаться в кодировке ANSI с использованием «длинных имён» файлов. В MS-DOS возможно именовать файлы только в кодировке OEM с «короткими» именами файлов и каталогов;

  4. Содержимое файла, созданного средствами Windows, сразу и целиком читается в оперативную память компьютера, и уже потом анализируются другими функциями (например, sscanf). В MS-DOS Вы могли вводить и выводить файлы последовательно по строкам, по формату и по записям (используя функции fges, getc, fscanf и др.). Используемый в Windows способ чтения-записи является более «безопасным» для обработчика данных и операционной системы;

  5. Следствие вышесказанного. В операционной системе Microsoft Windows нужно открывать файл, осуществлять все операции чтения записи и закрывать файл в пределах обработчика одного сообщения из очереди сообщений Windows. В MS-DOS Вы могли вначале программы открыть файл, где-то в теле программы осуществить операции ввода-вывода, и закрыть файлы в конце программы. В Windows этот способ не работает – программа в ней выполняется не в том порядке, в котором записаны действия, а в том порядке, в каком поступают программе системные вызовы. Вследствие этого, по «логике программы», закрытие файла может произойти прежде, чем операция записи-чтения из файла. Естественно, произойдёт «отказ системы» со всеми вытекающими неприятными последствиями;

  6. Функции открытия файлов возвращают операционной системе намного больше информации, чем «обычные» функции открытия файлов MS-DOS. При этом принимать решение, использовать или нет эту расширенную информацию, может сам программист;

  7. «Стандартными средствами открытия файлов» в Microsoft Windows невозможно открытие файлов для добавления информации в конец файла.… Наверное, Вы поняли почему. Если нет – отвечаю: при чтении всего файла в буфер в конец файла можно записать любую информацию, с тем чтобы затем её сбросить на диск под тем же именем, и дополнительного режима открытия файлов не требуется;

  8. Помимо функций файлового ввода-вывода Microsoft Windows Вы также можете использовать аналогичные функции ввода-вывода MS-DOS, с указанными Выше ограничениями. Но учтите, что функциями ввода-вывода MS-DOS (всё равно, являются ли они консольными, потоковыми или другими), нельзя выводить текст на экран, принтер, COM порт, а также вводить данные с клавиатуры;

Примечание: операции потокового вывода на экран и ввода с клавиатуры можно также осуществить и в Windows, указав опцию в IDE при создании проекта «консольное приложение Windows». Этот вопрос Вы можете изучить самостоятельно [38].

09.01.02. Функции создания и закрытия файлов
методами Win API


Для создания, открытия и закрытия файлов Windows API использует следующие функции:

ФУНКЦИЯ OpenFile

СИНТАКСИС: HFILE WINAPI OpenFile( lpszFileName, lpOpenStruct, fuMode)

LPCSTR lpszFileName — путь к файлу (в виде дальнего указателя на строку в кодировке ANSI, заканчивающуюся двоичным нулём);

OFSTRUCT FAR* lpOpenStruct — адрес структуры OFSTRUCT, заполняемой при первом открытии файла;

UINT fuMode — режим работы и атрибуты файла;

НАЗНАЧЕНИЕ: Открывает файл и связывает с ним дескриптор файла;

ОПИСАНИЕ: Функция предназначена для создания, открытия, повторного открытия и удаления файлов. В имени файла допускается указывать символы шаблона, такие как «*» и «?». Параметр fuMode используется для определения действий, выполняемых функцией OpenFile, а также задаёт атрибуты файла. Когда функция OpenFile вызывается в первый раз для открытия файла, она заполняет структуру OFSTRUCT, описанную в приложении №1 (смотри пункт 09.06 данной лекции);

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает идентификатор файла, который можно (и нужно) использовать во всех последующих операциях с файлом, или -1 при ошибке;

ПЕРЕНОСИМОСТЬ: Версии MS Windows 3.0 и старше;

ФУНКЦИЯ _lopen

СИНТАКСИС: HFILE WINAPI _lopen( LPCSTR lpszFileName, int fuOpenMode)

LPCSTR lpszFileName — путь к файлу (в виде дальнего указателя на строку в кодировке ANSI, заканчивающуюся двоичным нулём);

int fnOpenMode — параметр определяет режим, в котором открывается файл;

НАЗНАЧЕНИЕ: Открывает файл и связывает с ним дескриптор файла (упрощённая версия);

ОПИСАНИЕ: Функция предназначена для открытия, повторного открытия файлов. В имени файла допускается указывать символы шаблона, такие как «*» и «?». Параметр fuMode используется для определения действий, выполняемых функцией _lopen;

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Функция возвращает идентификатор файла, который можно (и нужно) использовать во всех последующих операциях с файлом, или HFILE_ERROR при ошибке;

ПЕРЕНОСИМОСТЬ: Версии MS Windows 3.0 и старше;

ФУНКЦИЯ _lclose

СИНТАКСИС: HFILE WINAPI _lclose( hf )

HFILE hf — дескриптор закрываемого файла;

НАЗНАЧЕНИЕ: Закрывает файл, связанный с соответствующим дескриптором;

ОПИСАНИЕ: Закрывает файл с дескриптором hf;

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Если файл закрыт успешно, _lclose возвращает нулевое значение. При ошибке возвращается значение: HFILE_ERROR;

ПЕРЕНОСИМОСТЬ: Версии MS Windows 3.0 и старше;

ФУНКЦИЯ _lcreat

СИНТАКСИС: HFILE _lcreat( lpszFileName, fuAttribute)

LPCSTR lpszFileName — путь к файлу (в виде дальнего указателя на строку в кодировке ANSI, заканчивающуюся двоичным нулём);

int fuAttribute — переменная позволяет определить атрибуты создаваемого файла;

НАЗНАЧЕНИЕ: Создаёт файл средствами Win API;

ОПИСАНИЕ: Это более простая, чем OpenFile, функция для создания новых файлов. Имя файла не должно содержать метасимволов шаблона. Если указанный первым параметром файл не существует, функция _lcreat создаёт его и открывает для записи, возвращая его дескриптор файла. Если файл существует, он обрезается до нулевой длины, и затем открывается для чтения и записи;

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Идентификатор созданного файла;

ПЕРЕНОСИМОСТЬ: Версии MS Windows 3.0 и старше;

Отличие функции OpenFile от функции _lopen заключается в поддержке ей расширенной информации о файле, передаваемой структуре OFSTRUCT, и в большем числе поддерживаемых флагов команды. Информацию о флагах функций OpenFile, _lcreate и _lopen смотри в таблице 09.I. Описание функций смотри в приложении №I к данной лекции (пункт 09.006).


Таблица 09.I.
Флаги и режимы открытия файлов средствами WinAPI.

<>

следующая страница >>
Смотрите также:
Лекция 09 Ввод-вывод с использованием Winapi
458.47kb.
7 стр.
Лекция 03 Прямой ввод-вывод: Часть II
138.18kb.
1 стр.
Уровни рассмотрения ос: Пользователь
314.1kb.
1 стр.
Министерство путей сообщения СССР
797.63kb.
4 стр.
Составление запросов для поисковых систем с использованием логических выражений
139.49kb.
1 стр.
Лекция №1 2 Лекция №2 8 Лекция №3. 13 Лекция №4 14 Лекция №24 Лекция №7 24 Конспект лекций по курсу
316.67kb.
1 стр.
Всероссийская олимпиада школьников. Муниципальный этап Предмет: программирование Класс: 6-11
88.85kb.
1 стр.
Например, чтобы ввести формулу = А1 + В2, выполните следующие действия
497.83kb.
8 стр.
Свойства информации. Единицы измерения количества информации. Важнейшие свойства информации
18.86kb.
1 стр.
Понятие операционной системы; эволюция развития операционных систем; функции операционных систем и подходы к построению операционных систем
823.67kb.
4 стр.
Лекция «Мир и наши дети»
45.31kb.
1 стр.
Профессиональные навыки и знания
31.44kb.
1 стр.