備忘録と銘打ったのでまずは過去ハマったことをメモっていこう
FileInfo info = new FileInfo(@"C:\temp\hoge.txt");
if ((info.Attributes & FileAttributes.Hidden) != 0)
{
Console.WriteLine("隠しファイルです。");
}なんてことをよくやりますし、いろんなサイトでサンプルとして載っているのもよく見かけます
が、これには実は落とし穴が
FileInfo に渡したパスが存在しないファイルの場合、 Attributes には -1 が格納されてます
-1 ということはビットのスタンディングオベーション状態なわけで
つまり、存在しないファイルは隠しファイルであり圧縮ファイルでありシステムファイルでありReadOnlyであり・・・・
ってんなわけねー
FileInfo info = new FileInfo(@"C:\temp\hoge.txt");
if (info.Exists && (info.Attributes & FileAttributes.Hidden) != 0)
{
Console.WriteLine("隠しファイルです。");
}というように存在チェックもかかさないようにしましょう
# しかしMSもこれぐらい考慮してくれてもいいもんだと思うけど