
- •Оглавление
- •1 Простейшее Win32 приложение
- •2 Функция WinMain
- •3 Оконный класс
- •4 Стили класса, стили окна
- •5 Создание экземпляра оконного класса
- •6 Динамические изменения свойств оконного класса
- •7 Обработка сообщений
- •8 Программирование клавиатуры
- •9 Коды oem, ansii, asci, виртуальные коды клавиш
- •10 Символьные сообщения
- •11 Обработка сообщений от мыши
- •12 Программирование таймера
- •13 Диалоговые окна
- •14 Структура шаблона диалога
- •14(А) Ресурсы диалога
- •15 Функции создания диалога
- •16 Взаимодействие между элементами управления
- •17 Сообщения, SendMessage, SendDlgItemMessage
- •18 Обработка сообщений от элементов диалога
- •19 Элемент «Слайдер» (Румянцев - Азбука программирования в Win32 api, c.148)
- •20 Элемент ProgressBar (Румянцев - Азбука программирования в Win32 api, c.156)
- •21 Bios (общие сведения)
- •22 Файлы (общие сведения)
- •23 Создание файла (Win32 api)
- •24 Операции с файлом (Win32 api)
- •25 Организация файлов
- •26 Файловые системы (общие сведения)
- •Создание файла.
- •Удаление файла.
- •28 Структура логического диска под fat12 (wfat)
- •29 Каталоги в fat12
- •30 Алгоритм определения расположения файлов на диске
- •31 Ф.С. Fat32 (отличительные особенности)
- •32 Изменение элементов системных объектов при выполнении copy
- •33 Ntfs (общие сведения)
- •34 Запись файла в mft
- •35 Метафайлы
- •36 Атрибуты записи файла
- •37 Изменение системных данных при выполнении copy
- •38 Изменение системных данных при выполнении del
- •39 Изменение системных данных при выполнении move
- •40 Процессы. Потоки. Общие сведения
- •41 Модель процесса
- •42 Контекст процесса
- •43 Дескриптор процесса
- •44 Создание процесса (общие сведения)
- •45 Окончание процесса (общие сведения)
- •46 Состояния процесса
- •47 Уровни планирования процессов
- •48 Диспетчеризация процессов
- •49 Класс приоритета процесса
- •50 Создание процесса (Win32 api)
- •51 Win32 Api. Управление процессами
- •52 Win32 Api. Окончание процесса
- •53 Среда процесса
- •54 Командная строка процесса
- •55 Наследование дочерними процессами ресурсов родителя
- •56 Список процессов
- •57 Время выполнения процесса
24 Операции с файлом (Win32 api)
1) Позиционирование файлового указателя
Когда CreateFile возвращает описатель файла, система связывает с этим описателем файловый указатель. Он определяет 64-разрядное смещение внутри файла, начиная с которого будет выполняться очередная операция синхронного чтения или записи. Сначала файловый указатель устанавливается в 0, и, если вызвать ReadFile или WriteFile, то указатель сместиться на количество прочитанных / записанных байтов.
Для произвольного доступа к файлу используется функция
DWORD SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod);
Параметр hFile идентифицирует описатель файла, с которым связан указатель.
Параметр lDistanceToMove сообщает системе, на сколько байтов Вы хотите сместить указатель. Передаваемое число добавляется к текущему значению указателя, поэтому отрицательное число позволяет перемещаться назад.
Параметр lpDistanceToMoveHigh используется для перемещения указателя в больших файлах, для которых не хватает 32-битного смещения.
Параметр dwMoveMethod сообщает функции SetFilePointer, как интерпретировать параметры lDistanceToMove и lpDistanceToMoveHigh (FILE_BEGIN, FILE_CURRENT, FILE_END).
2) Установка конца файла
Обычно система сама устанавливает конец файла при его закрытии. Но иногда нужно принудительно укоротить или расширить файл. Для этого используется функция
BOOL SetEndOfFile(HANDLE hFile);
Она изменяет длину файла по текущему значению файлового указателя.
3) Блокировка и разблокировка участков файла
Блокировка участка файла осуществляется вызовом функции:
BOOL LockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh);
Параметр hFile идентифицирует описатель файла, участок которого нужно блокировать.
Параметры dwFileOffsetLow и dwFileOffsetHigh определяют 64-битное смещение начала блокируемого участка внутри файла, а параметры nNumberOfBytesToLockLow и nNumberOfBytesToLockHigh – число блокируемых байтов.
Для разблокирования участка файла используется функция:
BOOL UnlockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh);
Ее параметры аналогичны предыдущей функции.
4) Чтение запись
Для чтения используется функция:
BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
Для записи используется функция:
BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
Хотя в именах функций есть слово File, эти функции можно использовать для работы с любым устройством.
Параметр hFile – описатель устройства, к которому необходимо получить доступ.
Параметр lpBuffer указывает на буфер, в который считываются данные с устройства (или из которого записываются данные на устройство).
Параметры nNumberOfBytesToRead и nNumberOfBytesToWrite сообщают функциям ReadFile и WriteFile, сколько байтов следует прочесть с устройства или записать на него.
Параметр lpOverlapped используется для асинхронного ввода/вывода.