Все файлы имеют атрибут FILE_ATTRIBUTE_ARCHIVE

Я работаю над программой, которая должна получить атрибуты всех файлов из выбранной директории в std :: vector.

Этот код показывает, как я получаю атрибуты файла.

DWORD attr_flags = GetFileAttributes(file_path);

if (attr_flags == INVALID_FILE_ATTRIBUTES) {
std::cout << "Invalid file attributes." << std::endl;
return;
}

И разбирать выбывшие флаги вот так.

if (attr_flags & FILE_ATTRIBUTE_ARCHIVE) {
attrs.push_back(defines::Attributes::kArchive);
attr_flags &= ~FILE_ATTRIBUTE_ARCHIVE;
}

if (attr_flags & FILE_ATTRIBUTE_COMPRESSED) {
attrs.push_back(defines::Attributes::kCompressed);
attr_flags &= ~FILE_ATTRIBUTE_COMPRESSED;
}

/* etc... */

Итак, в конце концов я печатаю результат на консоль и получаю это:

Все файлы имеют атрибут архива

Может кто-нибудь, пожалуйста, скажите, почему все файлы (даже не архив) имеют атрибут архива?

P.S: MSDN сказать, является

FILE_ATTRIBUTE_ARCHIVE  32 (0x20)

Файл или каталог, который является архивным файлом или каталогом. Приложения обычно используют этот атрибут, чтобы пометить файлы для резервного копирования или удаления.

1

Решение

Атрибут «archive» не означает «этот файл является архивом» (как файл ZIP или 7Z). Скорее это обычно означает «этот файл должен быть сохранен»:

В Windows и OS / 2 при создании или изменении файла устанавливается бит архива, а при резервном копировании файла бит архива очищается. Таким образом, значение бита архива: этот файл должен быть заархивирован, или же: этот файл не был заархивирован.

инкрементное резервное копирование Задача может использовать бит архива, чтобы определить, какие файлы уже были заархивированы, и выбрать только новые или измененные файлы для резервного копирования.

Я не думаю, что это больше используется на практике (если это когда-либо было).

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]