Я работаю над программой, которая должна получить атрибуты всех файлов из выбранной директории в 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)
Файл или каталог, который является архивным файлом или каталогом. Приложения обычно используют этот атрибут, чтобы пометить файлы для резервного копирования или удаления.
Атрибут «archive» не означает «этот файл является архивом» (как файл ZIP или 7Z). Скорее это обычно означает «этот файл должен быть сохранен»:
В Windows и OS / 2 при создании или изменении файла устанавливается бит архива, а при резервном копировании файла бит архива очищается. Таким образом, значение бита архива: этот файл должен быть заархивирован, или же: этот файл не был заархивирован.
инкрементное резервное копирование Задача может использовать бит архива, чтобы определить, какие файлы уже были заархивированы, и выбрать только новые или измененные файлы для резервного копирования.
Я не думаю, что это больше используется на практике (если это когда-либо было).
Других решений пока нет …