Визначення стану файлу в CBuilder

Як я вже зазначав, функції API FindFirstFile і FindNextFile повертають покажчик на заповнену структуру типу WIN32_FIND_DATA Ця структура – цілий джерело інформації про фото Не тільки основне, але також і альтернативне імя файлу знаходиться тут Крім того, тут є і розмір файлу (з незрозумілих причин записаний у двох подвійних машинних словах, переставлених щодо один одного: спочатку старше слово, потім молодше), і атрибути файлу, які ми, власне, й шукали

Розмір файлу зберігається в двох роздільних частинах типу DWORD (Подвійне слово, 4 байти) Помноживши старше (подвійне) слово розміру на константу MAXDWORD, Ми отримаємо розмір файлу, округлений (з недоліком) до подвійного слова Додавши молодше слово, ми отримаємо повний розмір файлу в байтах

Після розміру файлу ми займемося його атрибутами Атрибути файлу – побітовое безліч, яке вказує на стан файлу Атрибути вказують, чи можна проводити запис у файл, змінився файл після останнього резервного копіювання (біт archive), чи є файл тимчасовим файлом в системі (і буде видалений під час перезавантаження) і багато інших речей У табл 91 наведені можливі значення бітів – атрибутів файлу, а також пояснюється, що вони означають

Атрибути файлу перевіряються на кожен з бітів Хоча є комбінації атрибутів, які реально не застосовуються (наприклад, тимчасовий і системний файл), ви можете присвоїти такі

атрибути будь-якого файлу в системі, якщо захочете Для зміни атрибутів файлів можна використовувати програму attrexe (з командного рядка), а для деяких атрибутів – також Windows Explorer

Таблиця 91 Атрибути файлів в Windows FILE_ATTRIBUTE_ARCHIVE Вказує, що даний файл змінився Звичайно програма

резервного копіювання скидає цей біт

FILE_ATTRIBUTE_COMPRESSED Вказує, що файл зберігається в стислому вигляді і вимагає розпакування для використання

FILE_ATTRIBUTE_DIRECTORY Вказує, що файл насправді є каталогом

і може містити в собі файли

FILE_ATTRIBUTE_HIDDEN Вказує, що файл прихований За замовчуванням такі файли не відображаються в Windows Explorer

FILE_ATTRIBUTE_READONLY Вказує, що файл призначений тільки для читання

У такі файли не можна нічого записати Крім того, їх не можна безпосередньо видалити FILE_ATTRIBUTE_SYSTEM Вказує, що це системний файл Хоча це всього лише попередження, зміна системних файлів може привести до страшних наслідків FILE_ATTRIBUTE_TEMPORARY Вказує, що файл – тимчасовий Тобто він буде видалений при наступному завантаженні операційної системи

Після того як ми отримали атрибути файлу і помістили результати в текстовий рядок, інформація про фото передається у відповідний ряд в сітці рядків Наступний файл виходить викликом функції API FindNextFile і процес повторюється Цикл припиниться, коли метод FindNextFile поверне false Зауважте, що в цьому випадку ми робимо перевірку, викликаючи функцію API GetLastError, Щоб зрозуміти, чи дійсно це все Якщо ми обробили останній файл, то функція API GetLastError поверне ERROR_NO_MORE_FILES (більше немає файлів) Будь-яка інша помилка означає, що файл просто не може бути оброблений (наприклад, він вже відкритий яким додатком і модифікується)

На рис 95 показано працює додаток з відображеної групою файлів Тут ви можете бачити мітку компакт-диска, а також окремі файли на компакт-диску, кожен з відображеними атрибутами, імям і розміром

У даному прикладі ми розглянули досить багато функцій API системи Windows SDK (Software Development Kit, пакет для розробки програмного забезпечення) Доброю новиною є те, що в CBuilder простіше працювати з API, ніж в Delphi або Visual Basic, так як типи даних, які ви передаєте функцій API, в основному збігаються з типами даних, які C + + розуміє безпосередньо Ви раді, що це так просто Вам би, звичайно, хотілося, щоб всі речі були настільки ж прості

Рис 95 Додаток FileAttributeViewer в роботі

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*