訪問して頂きありがとうございます。まさふくろーです。
この記事では、ファイルの属性を調べる方法をご紹介します。
ファイルの属性を調べる
定数
値
内容
Archive
32
ファイルが前回のバックアップ以降に変更されているか。
Directory
16
ディレクトリまたはフォルダ。読み取りのみ可能。
Hidden
2
隠しファイル
Normal
0
標準のファイル。他の属性を持たない。
ReadOnly
1
読み取り専用
System
4
システムファイル
IO.File.GetAttributes(ファイルパス)
補足 |
引数が指定されていない場合は、例外ArgumentExceptionが発生します。 |
指定したファイルが見つからない場合は、例外FileNotFoundExceptionが発生します。 |
サンプルプログラム
サンプルファイルの属性
処理フロー
サンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim FilePath As String = TextBox1.Text Dim str As String = String.Empty Dim FAttribute As IO.FileAttributes Try FAttribute = IO.File.GetAttributes(FilePath) If (FAttribute And IO.FileAttributes.Archive) = IO.FileAttributes.Archive Then str = str & "アーカイブ状態" & ControlChars.NewLine End If If (FAttribute And IO.FileAttributes.Hidden) = IO.FileAttributes.Hidden Then str = str & "隠しファイル" & ControlChars.NewLine End If If (FAttribute And IO.FileAttributes.ReadOnly) = IO.FileAttributes.ReadOnly Then str = str & "読み取り専用" & ControlChars.NewLine End If Label1.Text = str Catch ex As ArgumentException Label1.Text = "パスが指定されていません。" Catch ex As IO.FileNotFoundException Label1.Text = "ファイルが見つかりません。" End Try End Sub End Class |
2 | 「属性を調べる」ボタンクリック時に以下処理を行う。 |
4 | ファイルパスを、文字列型の変数「FilePath」に代入。 |
10 | ファイルの属性を取得する処理を実行する。 |
12 | ファイルの属性が「Archive」の場合、 |
14 | 文字列型の変数「Str」に文字列「アーカイブ状態」を追加(改行付き)。 |
18 | ファイルの属性が「Hidden」の場合、 |
20 | 文字列型の変数「Str」に文字列「隠しファイル」を追加(改行付き)。 |
24 | ファイルの属性が「ReadOnly」の場合、 |
26 | 文字列型の変数「Str」に文字列「読み取り専用」を追加(改行付き)。 |
30 | 正常に処理が実行された場合、変数「Str」の値をラベルに表示する。 |
32 | ファイルのパスが指定されていない場合、 |
34 | 「パスが指定されていません。」のメッセージをラベルに表示する。 |
36 | 指定したファイルが見つからない場合、 |
38 | 「ファイルが見つかりません。」のメッセージをラベルに表示する。 |
ビット演算について
主なビット演算子の種類は以下表になります。 FAttribute = IO.File.GetAttributes(FilePath) と記述すると、「Archive」「ReadOnly」の2種類の属性が取得できます。 次に「FAttribute」オブジェクトとFileAttributes列挙体の値をビット演算し、1つずつ属性を調べます。 定数「Archive」「ReadOnly」の値は、「32」「1」なので、2つの属性が設定されている場合は「33」(32+1)になります。 になり、ビット演算した結果は以下になります。 If (FAttribute And IO.FileAttributes.Archive) = IO.FileAttributes.Archive Then If (FAttribute And IO.FileAttributes.ReadOnly) = IO.FileAttributes.ReadOnly Then となります。
演算子
演算名
説明
例
結果
And
論理積
両方とも「1」ならば結果は「1」
1 And 1
1
1 And 0
0
0 And 0
0
Or
論理和
両方とも「1」、もしくは、どちらか一方が「1」ならば、結果は「1」
1 Or 1
1
1 Or 0
1
0 Or 0
0
Not
論理否定
「1」ならば「0」、「0」ならば「1」
Not 1
0
Not 0
1
FileAttributes列挙体
定数
値
Archive
32
Directory
16
Hidden
2
Normal
0
ReadOnly
1
System
4
これらの値を2進数で表すと、
10進数
2進数
32
100000
1
000001
33
100001
10進数
2進数
結果
33と32の論理積は
100001 And 100000
各桁ごとに計算すると、100000(10進数で表すと「32」、定数で表すと「Archive」となる。)
33と1の論理積は
100001 And 000001
各桁ごとに計算すると、000001(10進数で表すと「1」、定数で表すと「ReadOnly」となる。)
関連記事
最後まで読んでいただき、ありがとうございました!