Page 60 - 4989
P. 60
При роботі з функціями пошуку слід зважати на те, що
результатом пошуку може бути як файл, так і каталог. Щоб
визначити, що саме було знайдено, слід застосувати функцію
GetFileAttributes, наприклад:
DWORD dw = GetFileAttributes(fileName);
if (dw | FILE_ATTRIBUTE_DIRECTORY)
{
// ...
}
Крім того, якщо шукається довільний файл (маска «*»),
результати пошуку будуть включати поточний каталог («.») та
батьківський каталог («..»).
Функція GetFileInformationByHandle заповнює струкутру
типу BY_HANDLE_FILE_INFORMATION, у якій поля часу
створення, модифікації та останнього доступу до файла мають
тип FILETIME – 64-бітне ціле число, що дорівнює кількості 100-
наносекундних інтервалів, що пройшли від 1 січня 1601 року.
Щоб отримати рік, місяць, день і т.д., слід перетворити цей час до
формату системного часу (структура SYSTEMTIME) функцією
FileTimeToSystemTime.
Функції CreateFile, ReadFile, WriteFile використовуються
також для роботи із пристроями. При цьому в якості імені файла
слід вказати ім’я пристрою. Наприклад, консоль представлена в
ОС Windows пристроями CONIN$ - пристрій вводу (клавіатура)
та CONOUT$ - пристрій виводу (вікно консолі). Для вводу-
виводу даних у консолі є спеціальні функції Windows API, однак
можна оперувати з ними і за допомогою функцій CreateFile,
ReadFile, WriteFile. Наприклад, наступний код виводить рядок у
консоль:
HANDLE hCon = CreateFile(L"CONOUT$", GENERIC_WRITE,
0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hCon != INVALID_HANDLE_VALUE)
{
char buf[] = "Hello world!"; DWORD written;
WriteFile(hCon, buf, strlen(buf), &written, NULL);
}
60