VB6・VBA関数メモ:FileLen関数

FileLen関数についてメモしておきます。

この関数はファイルのサイズを取得する際に使用します。
LOF関数と違いOpenステートメントでファイルを開かなくても使用可能です。

LOF関数と違いFileLen関数はオープン前のファイルサイズを返します。
(FileLen関数は書き込み中のファイルのサイズは取得できない)

速度に関してはオープン状態が維持されている場合はLOF関数の方が早いようですが、
毎回オープン・クローズを行う場合はFileLen関数の方が早いようです。


概要

FileLen(PathName As String) As Long
機能 ファイルのサイズを返す
引数 PathName 対象ファイルパス String型
戻り値 ファイルのサイズ(バイト単位) Long型


使用例

説明 記述例 出力
(Sumple.txt)
12345
abcde
あいうえお
ファイルサイズを取得する
Dim file     As String
Dim fileSize As Long

file = "D:¥Sumple.txt"
fileSize = FileLen(file)

Debug.Print fileSize
24


動作検証

説明 記述例 出力
LOF関数とFileLen関数の動作の違い
(FileLen関数は書き込み中のファイルサイズを取得できない)
Dim i    As Integer
Dim n    As Integer
Dim file As String

file = "D:¥Sumple.txt"
n = FreeFile
Open file For Output As #n

For i = 0 To 2
    Print #n, "123"
    Debug.Print "書き込み中(" & i & ")"
    Debug.Print "LOF     : " & LOF(n)
    Debug.Print "FileLen : " & FileLen(file)
    Debug.Print
Next i
    
Close #n

Debug.Print "ファイルクローズ後"
Debug.Print "FileLen : " & FileLen(file)
書き込み中(0)
LOF     : 5
FileLen : 0

書き込み中(1)
LOF     : 10
FileLen : 0

書き込み中(2)
LOF     : 15
FileLen : 0

ファイルクローズ後
FileLen : 15
LOF関数とFileLen関数の速度の違い

 [1]オープン状態が維持されている場合、LOF関数はFileLen関数より早い

 [2]毎回オープン・クローズを行う場合、LOF関数はFileLen関数より遅い
Dim i    As Long
Dim n    As Integer
Dim tmp  As Long
Dim t    As Double
Dim sec  As Double

t = Timer()

n = FreeFile
Open "D:¥Sumple.txt" For Input As #n

For i = 0 To 30000
    tmp = LOF(n)
Next i

Close #n

sec = ((Timer() - t) * 100) / 100
Debug.Print Format(sec, "0.00") & "秒"
0.15秒
Dim i    As Long
Dim n    As Integer
Dim tmp  As Long
Dim t    As Double
Dim sec  As Double

t = Timer()

For i = 0 To 30000
    n = FreeFile
    Open "D:¥Sumple.txt" For Input As #n
    
    tmp = LOF(n)
    
    Close #n
Next i

sec = ((Timer() - t) * 100) / 100
Debug.Print Format(sec, "0.00") & "秒"
39.11秒
Dim i    As Long
Dim tmp  As Long
Dim t    As Double
Dim sec  As Double

t = Timer()

For i = 0 To 30000
    tmp = FileLen("D:¥Sumple.txt")
Next i

sec = ((Timer() - t) * 100) / 100
Debug.Print Format(sec, "0.00") & "秒"
12.01秒
存在しないファイルを指定するとエラー
On Error GoTo ERR_HANDLER

    Debug.Print FileLen("D:¥NoExists.txt")

ERR_HANDLER:
    If Err > 0 Then Debug.Print Error
ファイルが見つかりません。
フォルダのパスを指定すると0が返る
(フォルダ内にファイルがあっても同様)
On Error GoTo ERR_HANDLER

    Debug.Print FileLen("D:¥Dir")

ERR_HANDLER:
    If Err > 0 Then Debug.Print Error
0


コメント
コメントする








    
この記事のトラックバックURL
トラックバック