VB.NETでファイル情報を取得する完全ガイド!初心者でもわかるFileInfoの使い方
生徒
「VB.NETで、ファイルがいつ作られたのか、サイズがどれくらいなのかを調べる方法はありますか?」
先生
「ありますよ。VB.NETでは、FileInfoというクラスを使うことで、ファイルのあらゆる情報を簡単に手に入れることができます。」
生徒
「クラス、ですか?なんだか難しそうですが、初心者でも使えますか?」
先生
「大丈夫です。FileInfoは『ファイルのプロフィール帳』のようなものだと考えれば分かりやすいですよ。一緒に使い方を見ていきましょう!」
1. FileInfoとは?ファイル情報のプロフィール帳
VB.NETでファイルそのものを操作するのではなく、そのファイルの「属性(データにまつわる情報)」を知りたいときに使うのがFileInfo(ファイルインフォ)クラスです。パソコンを全く触ったことがない方でも、学校の「名簿」をイメージすれば理解しやすいでしょう。名簿には名前だけでなく、誕生日や住所が載っていますよね。それと同じように、FileInfoを使えば、ファイルが作成された日時、最後に更新された日時、データの重さ(サイズ)、そしてファイル名といった情報を一括で取得できます。
これまで学習した「File」クラスとの違いは、FileInfoが「特定のファイルに特化したプロフィールカード」を作成する点にあります。一度カードを作ってしまえば、そこからいつでも情報を引き出せるようになるのです。これから紹介する具体的なプログラムを通して、その便利さを実感してみてください。
2. 基本的なファイル情報の取得方法
まずは、一番よく使う「作成日時」と「ファイルサイズ」を取得してみましょう。プログラムの冒頭には、ファイル操作の道具を揃えるために Imports System.IO を記述します。これは、プログラムの中で「入出力(IO)に関する機能を使います」という合図になります。FileInfoを使う準備ができたら、まずは対象となるファイルのパス(パソコン上の住所)を指定して、FileInfoのインスタンス(実体)を作り出します。
Imports System.IO
Module Module1
Sub Main()
' 調べたいファイルの場所を指定します
Dim filePath As String = "C:\temp\sample.txt"
' ファイルが存在する場合のみ処理を行います
If File.Exists(filePath) Then
' FileInfoの「インスタンス」を作成します
Dim info As New FileInfo(filePath)
' 作成日時を表示します
Console.WriteLine("作成日時: " & info.CreationTime)
' ファイルのサイズ(バイト単位)を表示します
Console.WriteLine("サイズ: " & info.Length & " バイト")
Else
Console.WriteLine("ファイルが見つかりませんでした。")
End If
End Sub
End Module
3. 専門用語と単位のやさしい解説
プログラムの中で出てきた聞き慣れない言葉や概念について、初心者の方にも分かりやすく解説します。ここを理解すると、プログラムが何をしているのかがもっとクリアになりますよ。
- インスタンス (Instance): プログラミングの世界での「実体」のことです。設計図(クラス)から、実際に触れる形にしたものを指します。今回の場合は「特定のファイル専用のプロフィールカード」を一枚作り出したことになります。
- バイト (Byte): デジタルの世界での重さ(サイズ)の単位です。1バイトは半角英数字1文字分くらいの重さと覚えておきましょう。
- Length (レングス): 直訳すると「長さ」ですが、ファイルの場合は「データの量(サイズ)」を指します。
例えば、あなたが図書館で一冊の本を手に取ったとします。その本のタイトル、出版日、ページ数をメモするのがFileInfoの役割です。このとき、本の中身を読み上げるのが「File.ReadAllText」などの別の命令で、本の外側にある情報(表紙のデータ)を扱うのが「FileInfo」だと考えると、役割の違いがはっきりしますね。
4. 更新日時とアクセス日時を詳しく調べる
ファイルのプロフィールには、作成日以外にも重要な日付があります。それは「いつ最後に中身を書き換えたか(更新日時)」と「いつ最後にファイルを開いたか(アクセス日時)」です。これらを知ることで、例えば「最近使っていない古いファイルを自動で見つけるプログラム」などが作れるようになります。VB.NETでは、これらもFileInfoの機能で簡単に見ることができます。次のプログラムで、それらの情報をまとめて取得してみましょう。
Imports System.IO
Module Module2
Sub Main()
Dim path As String = "C:\temp\test_data.log"
' ファイルのプロフィールを取得
Dim myFile As New FileInfo(path)
If myFile.Exists Then
' 最後に更新された日時
Dim lastWrite As DateTime = myFile.LastWriteTime
' 最後に開かれた日時
Dim lastAccess As DateTime = myFile.LastAccessTime
Console.WriteLine("最終更新日: " & lastWrite.ToString("yyyy年MM月dd日 HH時mm分"))
Console.WriteLine("最終アクセス: " & lastAccess.ToString("yyyy/MM/dd"))
End If
End Sub
End Module
5. ファイル名や拡張子だけを切り出す方法
FileInfoは、ファイルの名前を細かく分析するのも得意です。例えば、「C:\temp\diary.txt」という住所から、ファイル名の「diary.txt」だけを取り出したり、後ろについている「.txt(拡張子)」という種類を示す部分だけを抜き出したりできます。これは、大量のファイルを整理するプログラムを作るときに非常に重宝します。パソコンを触ったことがない方でも、苗字と名前を分けて管理するようなものだと思えば簡単ですね。
Imports System.IO
Module Module3
Sub Main()
Dim info As New FileInfo("C:\temp\manual.pdf")
' ファイル名(拡張子あり)を取得
Dim fullName As String = info.Name
' 拡張子(.pdfなど)だけを取得
Dim extension As String = info.Extension
' フォルダ名(住所の通り道)を取得
Dim dirName As String = info.DirectoryName
Console.WriteLine("ファイル名: " & fullName)
Console.WriteLine("種類(拡張子): " & extension)
Console.WriteLine("保存場所: " & dirName)
End Sub
End Module
6. サイズの単位を「KB」や「MB」に変換する考え方
FileInfoのLengthで取得できる単位は「バイト」です。しかし、大きなファイルだと「1048576バイト」のように数字が大きすぎて、人間には分かりづらくなってしまいます。そこで、普段パソコンでよく目にする「KB(キロバイト)」や「MB(メガバイト)」に変換する計算をプログラムに組み込んでみましょう。計算式は簡単で、1024で割るごとに単位が一つ上がります。数学が苦手な方でも、プログラムに計算を任せてしまえば大丈夫です。
例えば、1024バイトを1024で割ると1KBになります。さらにそれを1024で割ると1MBになります。このように、取得したデータを見やすい形に加工して表示することも、親切なプログラムを作るための大切なテクニックです。実際の現場では、このような変換処理がいたるところで使われています。
Imports System.IO
Module Module4
Sub Main()
Dim fInfo As New FileInfo("C:\temp\video.mp4")
If fInfo.Exists Then
' バイトを1024で割ってキロバイト(KB)にする
Dim sizeInKB As Double = fInfo.Length / 1024
' さらに1024で割ってメガバイト(MB)にする
Dim sizeInMB As Double = sizeInKB / 1024
' 小数点第2位まで表示するように調整
Console.WriteLine("ファイルサイズ: " & sizeInMB.ToString("0.00") & " MB")
End If
End Sub
End Module
7. ファイル属性の確認と読み取り専用判定
ファイルには、中身を書き換えられないようにロックされている「読み取り専用」という設定があります。FileInfoを使えば、そのファイルがロックされているかどうかもチェックできます。これは Attributes(アトリビュート) という項目で管理されています。もしプログラムでファイルを書き換えようとしてエラーが出る場合は、この属性をチェックすることで「あ、このファイルはロックされているから書き込めないんだ」と原因を特定できます。
未経験の方は、まず「FileInfoをNewして、ドット(.)を打つと色々な情報が出てくる」という感覚を掴んでください。VB.NETの開発画面(Visual Studioなど)を使っていれば、ドットを打った瞬間に、今回紹介したCreationTimeやLengthといった項目が一覧で表示されます。それを眺めているだけでも、「あ、こんなことも調べられるんだ!」という発見があって楽しいですよ。まずは自分の身の回りにあるファイルの情報を、プログラムで覗き見るところから始めてみましょう。