Ну, вы всегда можете начать с упрощения способа обработки value
в сеттере.Тогда вы могли бы избежать двойного получения, читая атрибуты в верхней части установщика.
public bool Archived
{
get
{
return (((File.GetAttributes(f.FullName)) & FileAttributes.Archive) != 0);
}
set
{
var attributes = File.GetAttributes(f.FullName);
bool archived = ((attributes & FileAttributes.Archive) != 0);
if (value)
{
if (!archived)
File.SetAttributes(f.FullName, attributes | FileAttributes.Archive);
}
else
{
if (archived)
File.SetAttributes(f.FullName, attributes & ~FileAttributes.Archive);
}
}
}
Теперь у Guffa есть точка зрения о том, что атрибуты кэшируются FileInfo
, хотя я вижу это больше какаргумент против использования FileInfo
в первую очередь.Я бы предпочел хранить только путь в виде строки.
Я также изменил битовый тест для сравнения с нулем, что я должен был сделать в первую очередь.Спасибо, KeithS и Guffa.
И, чтобы сохранить все это в одном месте, если бы мы использовали C # 4.0, мы можем сказать:
bool archived = attributes.HasFlag(FileAttributes.Archive);