Ответ 1
В .NET 4.0 вы можете:
dir.Attributes.HasFlag(FileAttributes.Hidden)
У меня есть этот цикл:
foreach (DirectoryInfo dir in downloadedMessageInfo.GetDirectories())
{
if (dir.Attributes != FileAttributes.Hidden)
{
dir.Delete(true);
}
}
Как я могу правильно пропустить все скрытые каталоги?
В .NET 4.0 вы можете:
dir.Attributes.HasFlag(FileAttributes.Hidden)
Измените свой оператор if на:
if ((dir.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
Вам нужно использовать битовую маску, поскольку атрибуты являются перечислением флага. Он может иметь несколько значений, поэтому скрытые папки могут быть скрыты и еще один флаг. Вышеупомянутый синтаксис будет правильно проверяться.
Attributes
- это Flags
значение, поэтому вам нужно проверить, содержит ли он FileAttributes.Hidden
с помощью поразрядного сравнения, например:
if ((dir.Attributes & FileAttributes.Hidden) == 0)
Этот код работает для меня в VB.Net;
If (dir.Attributes.Tostring.Contains("Hidden") Then
' File is hidden
Else
' File is not hidden
EndIf