Q:

Задание атрибутов файла

Не подскажете, как правильно работать с полями класса FileInfo. Пытаюсь установить атрибут, но ничего не получается... Прошу помощи..
FileAttributes ^attributes = gcnew File->GetAttributes("c:/Temp/testfile.txt");
if ((attributes & FileAttributes->ReadOnly) == FileAttributes->ReadOnly)

A:

Использование класса FileInfo:
FileInfo ^fileInfo = gcnew FileInfo(path);

if ((fileInfo->Attributes & FileAttributes::ReadOnly) == FileAttributes::ReadOnly) {
    // атрибут readonly установлен
}
else {
    // Устанавливаем атрибут
    fileInfo->Attributes = fileInfo->Attributes | FileAttributes::ReadOnly;
}

К полям перечисления обращаемся через двоеточие.

Для атрибута read-only в этом классе есть специальное свойство: IsReadOnly. Используя его, код можно упростить:
// проверяем атрибут
if (fileInfo->IsReadOnly)

// задаем атрибут
fileInfo->IsReadOnly = true;

А вот все остальные атрибуты (Hidden, Archive и прочие) придется проверять/устанавливать с помощью битовых операций.

Можно получать/задавать атрибуты напрямую:
FileAttributes attributes = File::GetAttributes(path);

if ((attributes & FileAttributes::ReadOnly) == FileAttributes::ReadOnly) {
    // атрибут readonly установлен
}
else {
    // Устанавливаем атрибут
    File::SetAttributes(path, attributes | FileAttributes::ReadOnly);
}

Методы GetAttributes и SetAttributes статические, поэтому используется двоеточие для их вызова.
FileAttributes - перечисление (enum), т. е. значимый тип. Указатель ^ для него не нужен.

