【VB.NET】ファイルの属性を調べるには?

訪問して頂きありがとうございます。まさふくろーです。

この記事では、ファイルの属性を調べる方法をご紹介します。

ファイルの属性を調べる

  • ファイルの属性を取得するには、FileクラスのGetAttributesメソッドを使います。
  • GetAttributesメソッドの引数には、対象とするファイルのパスを指定します。
  • 戻り値は、FileAttributes列挙体の値です。
  • FileAttributes列挙体の主な値は、以下の表になります。

    定数 内容
    Archive 32 ファイルが前回のバックアップ以降に変更されているか。
    Directory 16 ディレクトリまたはフォルダ。読み取りのみ可能。
    Hidden 2 隠しファイル
    Normal 0 標準のファイル。他の属性を持たない。
    ReadOnly 読み取り専用 
    System 4 システムファイル
  • 書式は、以下になります。

IO.File.GetAttributes(ファイルパス)

補足
引数が指定されていない場合は、例外ArgumentExceptionが発生します。
指定したファイルが見つからない場合は、例外FileNotFoundExceptionが発生します。

サンプルプログラム

サンプルファイルの属性

処理フロー

サンプルプログラム

2 「属性を調べる」ボタンクリック時に以下処理を行う。
4 ファイルパスを、文字列型の変数「FilePath」に代入。
10 ファイルの属性を取得する処理を実行する。
12 ファイルの属性が「Archive」の場合、
14 文字列型の変数「Str」に文字列「アーカイブ状態」を追加(改行付き)。
18 ファイルの属性が「Hidden」の場合、
20 文字列型の変数「Str」に文字列「隠しファイル」を追加(改行付き)。
24 ファイルの属性が「ReadOnly」の場合、
26 文字列型の変数「Str」に文字列「読み取り専用」を追加(改行付き)。
30 正常に処理が実行された場合、変数「Str」の値をラベルに表示する。
32 ファイルのパスが指定されていない場合、
34 「パスが指定されていません。」のメッセージをラベルに表示する。
36 指定したファイルが見つからない場合、
38 「ファイルが見つかりません。」のメッセージをラベルに表示する。

ビット演算について

  • ビット演算とは、2進数の0か1で表現するビット単位で計算することです。
  • ビットを計算させるには、ビット演算子を使います。

    主なビット演算子の種類は以下表になります。

    演算子 演算名 説明 結果
    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
  • これを踏まえて、今回のサンプルプログラムを例にすると、ファイルに設定されている属性は、「アーカイブ状態」「読み取り専用」なので、

    FAttribute = IO.File.GetAttributes(FilePath)

    と記述すると、「Archive」「ReadOnly」の2種類の属性が取得できます。

  • 次に「FAttribute」オブジェクトとFileAttributes列挙体の値をビット演算し、1つずつ属性を調べます。

    FileAttributes列挙体
    定数
    Archive 32
    Directory 16
    Hidden 2
    Normal 0
    ReadOnly
    System 4

    定数「Archive」「ReadOnly」の値は、「32」「1」なので、2つの属性が設定されている場合は「33」(32+1)になります。

    これらの値を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」となる。)
  • これをプログラムで表すと、

    If (FAttribute And IO.FileAttributes.Archive) = IO.FileAttributes.Archive Then

    If (FAttribute And IO.FileAttributes.ReadOnly) = IO.FileAttributes.ReadOnly Then

    となります。

関連記事

最後まで読んでいただき、ありがとうございました!

本のまとめ関連記事はこちら