Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
24 Робота з файлами у Windows.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
558.85 Кб
Скачать

24.11. Визначення і зміна атрибутів файла

Розпізнати атрибути файла можна за допомогою функції GetFileAttributes(), яка має наступний прототип:

DWORD GetFileAttributes(

LPCTSTR lpFileName); // ім’я файла

У разі успішного завершення ця функція повертає атрибути файла, інакше - значення -1. Єдиний параметр цієї функції повинен містити ім’я файла, а в повернутому значенні встановлюються атрибути файла. Ці атрибути можна перевірити, використовуючи наступні прапорці:

  • file_attribute_archive - архівний файл;

  • file_attribute_compressed - стиснутий файл;

  • file_attribute_directory - файл є каталогом;

  • FILE_ATTRIBUTE_ENCRYPTED - шифрований файл;

  • FILE_ATTRIBUTE_HIDDEN - прихований файл;

  • file_attribute_normal - нормальний файл;

  • file_attribute_not_content_indexed - файл не індексується;

  • file_attribute_offline - файл у зовнішній пам’яті;

  • FILE_ATTRIBUTE_READONLY - файл тільки для читання;

  • file_attribute_reparse_point - файл вимагає інтерпретації;

  • file_attribute_sparse_file - розріджений файл;

  • file_attribute_system - системний файл;

  • FILE_ATTRIBUTE_TEMPORARY - тимчасовий файл.

Детальніше атрибути файла описані в розд. 24.2. Про інші атрибути файла, які не увійшли до наведеного вище списку, можна дізнатися, використовуючи функцію GetFileAttributesEx().

Змінити атрибути файла можна за допомогою функції SetFileAttributes(), яка має наступний прототип:

BOOL SetFileAttributes(

LPCTSTR lpFileName, // ім’я файла

DWORD dwFileAttributes); // атрибути файла

У разі успішного завершення ця функція повертає ненульове значення, інакше - false. Параметр lpFileName повинен містити ім’я файла, а в параметрі dwFileAttributes можна встановити наступні атрибути файла:

  • file_attribute_archive - архівний файл;

  • file_attribute_hidden - прихований файл;

  • FILE_ATTRIBUTE_NORMAL – нормальний файл;

  • file_attribute_not_content_indexed - файл не індексується;

  • file_attribute_offline - файл у зовнішній пам’яті;

  • FILE_ATTRIBUTE_READONLY - файл тільки для читання;

  • file_attribute_system - системний файл;

  • file_attribute_temporary - тимчасовий файл.

При цьому відмітимо, що якщо встановлюється прапорець file_attribute_normal, то він має бути один, бо всі інші атрибути, анулюють цей атрибут. У лістингу 24.10 приведена програма, яка читає і змінює атрибути файла.

// Лістинг 24.10. Читання і зміна атрибутів файла

#include "stdafx.h"

int main()

{

DWORD file_attr;

wchar_t lpszFileName[] = L"C:\\Users\\Shogun\\Documents\\demo_file.dat";

// читаємо атрибути файла

file_attr = GetFileAttributes(lpszFileName);

if(file_attr == -1)

{

std::cerr << "Get file attributes failed." << std::endl

<< "The last error code: " << GetLastError() << std::endl;

std::cout << "Press any key to finish.";

std::cin.get();

return 0;

}

// перевіряємо, чи є файл нормальним

if(file_attr == FILE_ATTRIBUTE_NORMAL)

{

std::cout << "This is a normal file." << std::endl;

std::cin.get();

}

else

{

std::cout << "This is a not normal file." << std::endl;

std::cin.get();

}

// встановлюємо атрибут прихованого файла

if(!SetFileAttributes(lpszFileName, FILE_ATTRIBUTE_HIDDEN))

{

std::cerr << "Set file attributes failed." << std::endl

<< "The last error code: " << GetLastError() << std::endl;

std::cout << "Press any key to finish.";

std::cin.get();

return 0;

}

// Тепер можна перевірити, що файл став прихований

std::cout << "Now the file is hidden." << std::endl

<< "Press any key to continue.";

std::cin.get();

// Робимо назад файл звичайним

if(!SetFileAttributes(lpszFileName, FILE_ATTRIBUTE_NORMAL))

{

std::cerr << "Set file attributes failed." << std::endl

<< "The last error code: " << GetLastError() << std::endl;

std::cout << "Press any key to finish.";

std::cin.get();

return 0;

}

std::cout << "Now the file is again normal." << std::endl;

std::cin.get();

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]