Теоретичні відомості
Типи даних API WIN32
API WIN32 оперує сукупністю простих та складених типів даних. Деякі типи являють собою перевизначення стандартних типів мови програмування Сі:
BOOL – логічний (значення TRUE та FALSE);
CHAR – символьний (1 байт);
BYTE – цілий беззнаковий (1 байт);
WORD – цілий беззнаковий (2 байти);
DWORD – цілий беззнаковий (4 байти);
FLOAT – дійсний;
INT, LONG – цілий знаковий (4 байти);
LONGLONG – цілий знаковий (8 байт);
SHORT – цілий знаковий (2 байти);
VOID – пустий;
LPSTR – покажчик на символьний рядок (char *);
LPCSTR – покажчик на константний символьний рядок (const char *);
LPTSTR – покажчик на символьний рядок, що сумісний з Unicode (char *);
LPCTSTR – покажчик на константний символьний рядок, що сумісний з Unicode
(const char *);
HANDLE – цілий знаковий (4 байти) для визначення дескриптору об’єкту.
Функції API WIN32 для роботи з директоріями
Створення директорії
BOOL CreateDirectory(
LPCTSTR lpszPath, // шлях з назвою директорії
LPSECURITY_ATTRIBUTES lpsa // покажчик на дескриптор безпеки (NULL)
);
Повертає значення TRUE в разі успішного виконання.
Видалення директорії
BOOL RemoveDerectory(
LPCTSTR lpszPath // шлях з назвою директорії
);
Повертає значення TRUE в разі успішного виконання.
Визначення поточної директорії
DWORD GetCurrentDirectory(
DWORD nCurDir, // довжина буферу для отримання назви директорії
LPTSTR lpszCurDir // буфер, який отримує назву директорії
);
Повертає кількість символів, що записані до буферу.
Перевизначення поточної директорії
BOOL SetCurrentDirectory(
LPCTSTR lpszCurDir // шлях з назвою нової директорії
);
Повертає значення TRUE в разі успішного виконання.
Функції API WIN32 для роботи з файлами
Створення та відкриття файлу
HANDLE CreateFile(
LPCTSTR lpszName, // назва файлу
DWORD fdwAccess, // режим доступу (бітові прапори GENERIC_READ
та GENERIC_WRITE)
DWORD fdwShareMode, // сумісний доступ (0)
LPSECURITY_ATTRIBUTES lpsa, // покажчик на дескриптор безпеки (NULL)
DWORD fdwCreate, // режим відкриття (табл. 18)
DWORD fdwAttrsAndFlags, // атрибути файлу (табл. 19)
HANDLE hTemplateFile // розширенні атрибути (NULL)
);
Повертає дескриптор відкритого файлу або, в разі неуспішного виконання, значення INVALID_HANDLE_VALUE.
Таблиця 18
Режим відкриття |
Опис режиму |
CREATE_ALWAYS |
Створення нового файлу. Якщо файл існує, його вміст видаляється |
CREATE_NEW |
Створення нового файлу |
OPEN_ALWAYS |
Відкриття існуючого файлу. Якщо файл не існує, він створюється |
OPEN_ EXISTING |
Відкриття існуючого файлу |
TRUNCATE_ EXISTING |
Відкриття існуючого файлу з видаленням його вмісту |
Таблиця 19
Атрибути файлу |
Опис призначення атрибута файлу |
FILE_ATTRIBUTE_NORMAL |
Без атрибутів |
FILE_ATTRIBUTE_READONLY |
Тільки для читання |
FILE_ATTRIBUTE_HIDDEN |
Прихований |
FILE_ATTRIBUTE_SYSTEM |
Системний |
Закриття дескриптору об’єкта
BOOL CloseHandle(
HANDLE hObject // дескриптор об’єкта
);
Повертає значення TRUE в разі успішного виконання.
Читання з файлу
BOOL ReadFile(
HANDLE hFile, // дескриптор файлу
LPVOID lpBuffer, // покажчик на буфер, який отримує зчитані дані
DWORD nNumberOfBytesToRead, // кількість байт, що повинно бути зчитано з файлу
LPDWORD lpNumberOfBytesToRead, // покажчик на змінну, яка приймає кількість дійсно
зчитаних байт
LPOVERLAPPED lpOverlapped // покажчик на структуру OVERLAPPED (NULL)
);
Повертає значення TRUE в разі успішного виконання.
Запис до файлу
BOOL WriteFile(
HANDLE hFile, // дескриптор файлу
CONST VOID* lpBuffer, // покажчик на буфер з даними, що записуються
DWORD nNumberOfBytesToWrite, // кількість байт, що повинно бути записано до
файлу
LPDWORD lpNumberOfBytesToWrite, // покажчик на змінну, яка приймає кількість дійсно
записаних байт
LPOVERLAPPED lpOverlapped // покажчик на структуру OVERLAPPED (NULL)
);
Повертає значення TRUE в разі успішного виконання.
Видалення файлу
BOOL DeleteFile(
LPCTSTR lpszFileName // назва файлу
);
Повертає значення TRUE в разі успішного виконання.
Копіювання файлу
BOOL CopyFile(
LPSTSTR lpszExistingFile, // назва існуючого файлу
LPSTSTR lpszNewFile, // назва нового файлу
BOOL bCansel // прапор, який визначає дії при існуванні файлу з
назвою lpszNewFile (TRUE – файл не копіюється,
FALSE – файл перезаписується)
);
Повертає значення TRUE в разі успішного виконання.
Переміщення файлу або директорії
BOOL MoveFile(
LPSTSTR lpszExisting, // назва існуючого файлу або директорії
LPSTSTR lpszNew, // назва нового файлу або директорії
);
Повертає значення TRUE в разі успішного виконання.
Встановлення позиції покажчика читання/запису файлу
DWORD SetFilePointer(
HANDLE hFile, // дескриптор файлу
LONG lDictanceToMove, // кількість байт, на яке здійснюється переміщення
PLONG lpDistanceToMoveHigh, // покажчик на змінну, що містить старшу частину
значення зміщення (NULL)
DWORD dwMoveMetod // позиція зміщення (табл. 20)
);
Повертає значення нової позиції покажчика читання/запису файлу або, в разі невдачі, значення 0xFFFFFFFF.
Таблиця 20
Позиція зміщення |
Опис позиції зміщення |
FILE_BEGIN |
Початок файлу |
FILE_CURRENT |
Поточна позиція покажчика у файлі |
FILE_END |
Кінець файлу |
Визначення розміру файлу
DWORD GetFileSize(
HANDLE hFile, // дескриптор файлу
LPDWORD lpdwFileSizeHigh // покажчик на змінну, в яку повертається старша
частина значення розміру файлу (NULL)
);
Повертає молодшу частину значення розміру файлу або, в разі невдачі, значення 0xFFFFFFFF.
Пошук першого файлу або директорії, що відповідають шаблону пошуку
HANDLE FindFirstFile(
LPCTSTR lpszSearchFile, // шаблон пошуку або назва файлу
LPWIN32_FIND_DATA lpffd // покажчик на структуру WIN32_FIND_DATA, що
містить інформацію про знайдений файл або директорію
);
Повертає дескриптор пошуку, який використовується при подальшому пошуку файлів (директорій), або, в разі невдачі, INVALID_HANDLE_VALUE.
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; // атрибути знайденого файлу
FILETIME ftCreationTime; // час створення файлу
FILETIME ftLastAccessTime; // час останнього доступу до файлу
FILETIME ftLastWriteTime; // час модифікації файлу
DWORD nFileSizeHigh; // старше слово значення розмір файлу
DWORD nFileSizeLow; // молодше слово значення розміру файлу
DWORD dwReserved0; // зарезервоване значення (не використовується)
DWORD dwReservsd1; // зарезервоване значення (не використовується)
TCHAR cFileName[MAX_PATH]; // назва файлу
TCHAR cAlternateFileName[14]; // назва файлу у форматі 8.3
} WIN32_FIND_DATA;
Продовження пошуку файлів або директорій, що відповідають шаблону пошуку
BOOL FindNextFile(
HANDLE hFindFile, // дескриптор пошуку, який повертається при
виклику функції FindFirstFile
LPWIN32_FIND_DATA lpffd // покажчик на структуру WIN32_FIND_DATA, що
містить інформацію про знайдений файл
);
Повертає значення TRUE в разі успішного виконання.
Закриття дескриптору пошуку
BOOL FindClose(
HANDLE hFindFile // дескриптор пошуку
);
Повертає значення TRUE в разі успішного виконання.
Отримання дати і часу створення, останнього модифікування і останнього доступу до файлу
BOOL GetFileTime (
HANDLE hFile, // дескриптор файлу
LPFILETIME lpftCreation, // покажчик на структуру FILETIME, яка отримує
дату і час створення файлу
LPFILETIME lpftLastAccess, // покажчик на структуру FILETIME, яка отримує
дату і час останнього доступу до файлу
LPFILETIME lpftLastWrite // покажчик на структуру FILETIME, яка отримує
дату і час останньої модифікації файлу
);
Повертає значення TRUE в разі успішного виконання.
Перетворення 64-разрядного формату часу в системний формат
BOOL FileTimeToSystemTime(
CONST FILETIME* lpftTime, // покажчик на структуру FILETIME, яка містить
64-разрядний формат часу
LPSYSTEMTIME stTime // покажчик на структуру SYSTEMTIME, яка
отримує час в системному форматі
);
Повертає значення TRUE в разі успішного виконання.
typedef struct _SYSTEMTIME {
WORD wYear; // поточний рік
WORD wMonth; // поточний місяць: 1 – січень, 2 – лютий і т.д.
WORD wDayOfWeek; // поточний день тижня: 0 – неділя, 1 – понеділок
і т.д.
WORD wDay; // поточний день місяця
WORD wHour; // поточна година
WORD wMinute; // поточна хвилина
WORD wSecond; // поточна секунда
WORD wMillisecond; // поточна мілісекунда
} SYSTEMTIME;
Визначення атрибутів файлу або директорії
DWORD GetFileAttributes(
LPCTSTR lpszFileName // назва файлу або директорії
);
Повертає атрибути файлу або, в разі невдачі, значення 0xFFFFFFFF.
Функції API WIN32 консольного введення/виведення
Отримання дескриптора стандартного пристрою введення/ виведення
HANDLE GetStdHandle(
DWORD nStdHandle // значення, яке специфікує стандартний пристрій
(табл.21)
);
Повертає дескриптор стандартного пристрою або, в разі невдачі, значення INVALID_HANDLE_VALUE.
Таблиця 21
Значення |
Опис значення |
STD_INPUT_HANDLE |
Стандартний пристрій введення |
STD_OUTPUT_HANDLE |
Стандартний пристрій виведення |
STD_ERROR_HANDLE |
Стандартний пристрій виведення повідомлень про помилки |
Читання із буферу введення консолі (введення)
BOOL ReadConsole(
HANDLE hConsoleInput, // дескриптор буферу введення консолі
LPVOID lpBuffer, // покажчик на буфер, до якого записуються дані,
що зчитані з буферу введення консолі
DWORD nNumberOfCharsToRead, // кількість символів для читання
LPDWORD lpNumberOfCharsToRead, // покажчик на змінну, яка отримує кількість
зчитаних символів
LPVOID lpReserved // зарезервоване значення (NULL)
);
Повертає значення TRUE в разі успішного виконання.
Запис до буферу екрана консолі (виведення)
BOOL WriteConsole(
HANDLE hConsoleOutput, // дескриптор буфера екрана консолі
CONST VOID* lpBuffer, // покажчик на буфер, який містить символи, що
виводяться
DWORD nNumberOfCharsToWrite, // кількість символів, що будуть виводитися
LPDWORD lpNumberOfCharsToWrite, // покажчик на змінну, яка отримує кількість
символів, що виведені
LPVOID lpReserved // зарезервоване значення (NULL)
);
Повертає значення TRUE в разі успішного виконання.
Функції обробки текстових рядків
Конкатенація рядків символів
LPTSTR lstrcat(
LPTSTR lpString1, // покажчик на буфер, в якому міститься перший
рядок і до якого заноситься результат
конкатенації
LPCTSTR lpString2 // покажчик на другий рядок, що додається до
першого рядка
);
Повертає покажчик на буфер або, в разі невдачі, значення NULL.
Копіювання рядка символів до буферу
LPTSTR lstrcpy(
LPTSTR lpString1, // покажчик на буфер, до якого копіюється рядок
LPCTSTR lpString2 // покажчик на рядок, що копіюється
);
Повертає покажчик на буфер або, в разі невдачі, значення NULL.
Визначення довжини рядка символів
int lstrlen(
LPCTSTR lpString // покажчик на рядок символів
);
Повертає довжину рядка в байтах (ASCII – рядок ) або в символах (Unicode – рядок).
