情報の取得

サンプルコード

Sub Main()
  Dim myDate As Date
 
  '作成した日付と時間の取得
  myDate = System.IO.FileGetCreationTime("C:\test.txt")
 
  '最後にアクセスした日付と時間の取得
  myDate = System.IO.File.GetLastAccessTime("C:\test.txt")
 
  '更新された日付と時間の取得
  myDate = System.IO.File.GetLastWriteTime("C:\test.txt")
 
  'ファイルサイズの取得
  Dim Info As New System.IO.FileInfo("C:\WriteFile.txt")
  Console.WriteLine(Info.Length)
End Sub

各ローカル時計での時間の取得となっています。世界標準時を取得するにはそれぞれの関数名に'Utc'を付け加えてください。ファイルサイズはバイト単位になります。


情報の設定

サンプルコード

Sub Main()
  '作成した日付と時間の設定
  System.IO.File.SetCreationTime("C:\test.txt", myDate)
 
  '最後にアクセスした日付と時間の設定
  System.IO.File.SetLastAccessTime("C:\test.txt", myDate)
 
  '更新された日付と時間の設定
  System.IO.File.SetLastWriteTime("C:\test.txt", myDate)
End Sub

各ローカル時計での時間の取得となっています。世界標準時を取得するにはそれぞれの関数名に'Utc'を付け加えてください。


属性の取得・設定

サンプルコード

Sub Main()
  Dim FilaPath as String = "C:\WriteFile.txt"
  Dim fas As System.IO.FileAttributes = System.IO.File.GetAttributes(FilaPath)
 
  'ファイル属性に読み取り専用が膨れるかを確認する
  If ((fas And FileAttribute.ReadOnly) = FileAttribute.ReadOnly) Then
    Console.WriteLine("読み取り属性が含まれています")
  End If
 
  'ダイレクトに取ることもできます
  System.IO.File.GetAttributes(FilaPath)
 
  'またはFileInfoを使用することもできます。
  Dim info As New FileInfo(FilePath)
  Console.WriteLine(info.Attributes)
 
  'ファイルの属性を設定する
  System.IO.File.SetAttributes("C:\WriteFile.txt", IO.FileAttributes.ReadOnly Or IO.FileAttributes.Hidden)
End Sub

ファイルの属性を取得または設定するにはファイル属性列挙体のビット演算を使用します。

また、デイレクトリの属性も調べることができます。


対話的にファイル属性を取得する

サンプルコード

Sub Main()
  Dim FilaPath as String = "C:\WriteFile.txt"
  '①
  Dim fas As System.IO.FileAttributes = System.IO.File.GetAttributes(FilaPath)
 
  If ((fas And FileAttribute.ReadOnly) = FileAttribute.ReadOnly) Then
    Console.WriteLine("読み取り属性が含まれています")
  End If
 
  Dim attValue As Integer = 0
  Integer.TryParse(Console.ReadLine, attValue)
  If attValue < 0 Then
    Console.WriteLine("間違った値が指定されました")
  End If

  'またはFileInfoを使用することもできます。
  Dim info As New FileInfo(FilePath)
  If info.Attributes >= 0 AndAlso (info.Attributes And attValue) > 0 Then
    Console.WriteLine("指定された属性を持っています")
  Else
    Console.WriteLine("指定された属性はありません")
  End If
End Sub

①のようにすると対話的にファイル属性を取得したい場合には、いちいちコードを書き変えなくてはならなくなります。ビット演算子の特性をうまく使えば、対話的に属性を調べる事が出来ます。ちなみに私はこれにはまりました。

例えば、ファイル属性値は35(ReadOnly,Hidden,Archive)が設定されていたとします。コンソールから4(System)属性について聞かれた場合、そのビット演算は"100011" AND "000100" = "000000"となり、値は0になるので指定された属性はないと判断します。

コンソールから3(ReadOnly,Hidden)属性について聞かれた場合、そのビット演算は"100011" AND "000011" = "000011"と、値は0より大きくなるので指定された属性はあると判断します。