Чтение онлайн

на главную - закладки

Жанры

Системное программирование в среде Windows

Харт Джонсон М.

Шрифт:

 while(TRUE) {

HeaderChange = FALSE;

RecordChange = FALSE;

_tprintf(_Т("Введите r(ead)/w(rite)/d(elete)/q Запись#\n"));

_tscanf(_T("%c" "%d" "%c"), &Command, &RecNo, &Extra );

if (Command == 'q') break;

CurPtr.QuadPart = RecNo * sizeof(RECORD) + sizeof(HEADER);

ov.Offset = CurPtr.LowPart;

ov.OffsetHigh = CurPtr.HighPart;

ReadFile(hFile, &Record, sizeof(RECORD), &nXfer, &ov);

GetSystemTime(&CurrentTime); /*
Обновить поля даты и времени в записи. */

Record.RecordLastRefernceTime = CurrentTime;

if (Command == 'r' || Command == 'd') { /*Вывести содержимое записи.*/

if (Record.ReferenceCount == 0) {

_tprintf(_T("Запись номер %d – пустая.\n"), RecNo);

continue;

} else {

_tprintf(_Т("Запись номер %d. Значение счетчика: %d \n"), RecNo, Record.ReferenceCount);

_tprintf(_Т("Данные: %s\n"), Record.DataString);

/* Упражнение: вывести метки времени. См. следующий пример. */

RecordChange = TRUE;

}

if (Command == 'd') { /* Удалить запись. */

Record.ReferenceCount = 0;

Header.NumNonEmptyRecords--;

HeaderChange = TRUE;

RecordChange = TRUE;

}

} else if (Command == 'w') { /* Записать данные. Впервые? */

_tprintf(_Т("Введите новую строку для записи.\n"));

_getts(String);

if (Record.ReferenceCount == 0) {

Record.RecordCreationTime = CurrentTime;

Header.NumNonEmptyRecords++;

HeaderChange = TRUE;

}

Record.RecordUpdateTime = CurrentTime;

Record.ReferenceCount++;

_tcsncpy(Record.DataString, String, STRING_SIZE-1);

RecordChange = TRUE;

} else {

_tprintf(_T("Допустимые команды: r, w и d. Повторите ввод.\n"));

}

/* Обновить запись на месте, если ее содержимое изменилось. */

if (RecordChange) WriteFile(hFile, &Record, sizeof(RECORD), &nXfer, &ov);

/* При необходимости обновить количество непустых записей. */

if (HeaderChange) WriteFile(hFile, &Header, sizeof(Header), &nXfer, &ovZero);

 }

 _tprintf(_T("Вычисленное количество непустых
записей: %d\n"), Header.NumNonEmptyRecords);

 CloseHandle(hFile);

 return 0;

}
 

Атрибуты файлов и управление каталогами

Существует возможность просмотра указанного каталога с целью поиска файлов и других каталогов, имена которых соответствуют заданному шаблону, одновременно с получением атрибутов файлов. Для выполнения поиска требуется дескриптор поиска (search handle), получаемый с помощью функции FindFirstFile. Для нахождения файлов, имена которых удовлетворяют заданным условиям, используется функция FindNextFile, а для прекращения поиска — функция FindClose. 

HANDLE FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpffd)

Возвращаемое значение: дескриптор поиска. Значение INVALID_HANDLE_VALUE указывает на неудачное завершение функции.

В процессе поиска имен, соответствующих искомому, функция FindFirstFile проверяет имена не только файлов, но и подкаталогов. Возвращенное функцией значение дескриптора типа HANDLE используется для продолжения поиска.

Параметры

lpFileName — указатель на строку, содержащую имя каталога или полное имя файла, при указании которых можно использовать метасимволы (? и *). Если необходимо осуществить поиск конкретного файла, метасимволы опускаются.

lpffd — указатель на структуру WIN32_FIND_DATA, которая принимает информацию о первом найденном файле или каталоге, который удовлетворяет критерию поиска, если таковой был найден.

Структура WIN32_FIND_DATA определяется следующим образом: 

typedef struct_WIN32_FIND_DATA {

 DWORD dwFileAttributes;

 FILETIME ftCreationTime;

 FILETIME ftLastAccessTime;

 FILETIME ftLastWriteTime;

 DWORD nFileSizeHigh;

 DWORD nFileSizeLow;

 DWORD dwReserved0;

 DWORD dwReserved1;

 TCHAR cFileName[MAX_PATH];

 TCHAR cAlternateFileName[14];

 } WIN32_FIND_DATA;
 

Параметр dwFileAttributes можно тестировать на присутствие значений, описанных при рассмотрении функции CreateFile, а также некоторых других значений, например, FILE_ATTRIBUTE_SPARSE_FILE или FILE_ATTRIBUTE_ENCRYTPED, которые не устанавливаются функцией CreateFile. Описание меток времени трех типов (время создания, время последнего обращения и время последнего изменения) приведено в одном из следующих разделов. Названия полей размера файла (nFileSizeHigh и nFileSizeLow) говорят сами за себя. cFileName — это не полное имя файла, содержащее путь доступа, а само имя файла. cAlternateFileName — имя файла в формате DOS 8.3 (включая точку); эта информация редко используется и может понадобиться лишь для того, чтобы определить, каким будет имя файла в файловой системе FAT16.

Поделиться:
Популярные книги

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье

Шлейф сандала

Лерн Анна
Фантастика:
фэнтези
6.00
рейтинг книги
Шлейф сандала

Отморозки

Земляной Андрей Борисович
Фантастика:
научная фантастика
7.00
рейтинг книги
Отморозки

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Надуй щеки! Том 2

Вишневский Сергей Викторович
2. Чеболь за партой
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Надуй щеки! Том 2

Новый Рал 7

Северный Лис
7. Рал!
Фантастика:
попаданцы
5.00
рейтинг книги
Новый Рал 7

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

Фею не драконить!

Завойчинская Милена
2. Феями не рождаются
Фантастика:
юмористическая фантастика
5.00
рейтинг книги
Фею не драконить!

Лишняя дочь

Nata Zzika
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Лишняя дочь

Идеальный мир для Лекаря 22

Сапфир Олег
22. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 22

Новый Рал 3

Северный Лис
3. Рал!
Фантастика:
попаданцы
5.88
рейтинг книги
Новый Рал 3

Ученик. Книга 4

Первухин Андрей Евгеньевич
4. Ученик
Фантастика:
фэнтези
5.67
рейтинг книги
Ученик. Книга 4

Ворон. Осколки нас

Грин Эмилия
2. Ворон
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ворон. Осколки нас