ファイルサイズの取得(V)          <TOP>


ファイルサイズを取得します。

CreateFile 指定したファイルをオープンし、デバイスハンドルを返す

GetFileSize ファイルのサイズをバイト単位で取得

CloseHandle オープンされているオブジェクトハンドルをクローズ

 

例では「Constant.csv」を指定してファイルサイズを取得しています。

 

'================================================================
'= ファイルサイズの取得(V)

'=    (GetFileSize.bas)
'================================================================

' セキュリティを定義する構造体
Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
 
' 指定したファイルをオープンし、デバイスハンドルを返す
Declare Function Api_CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName$, ByVal dwDesiredAccess&, ByVal dwShareMode&, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDistribution&, ByVal dwFlagsAttributes&, ByVal hTemplateFile&)

' オープンされているオブジェクトハンドルをクローズ
Declare Function Api_CloseHandle& Lib "kernel32" Alias "CloseHandle" (ByVal hObject&)

' ファイルのサイズをバイト単位で取得
Declare Function Api_GetFileSize& Lib "kernel32" Alias "GetFileSize" (ByVal hFile&, lpFileSizeHigh&)

#define INVALID_HANDLE_VALUE -1         '見つからない場合
#define GENERIC_READ -2147483648        '読み込みモード(&H80000000)
#define OPEN_EXISTING 3                 'ファイルをオープンする(存在しない場合失敗)

Var FileName As String
Var hFileName As Long
Var sa As SECURITY_ATTRIBUTES
Var FileSizeLow As Long
Var FileSizeHigh As Long
Var Ret As Long 

'ファイル名を指定
FileName = "Constant.csv"

'セキュリティ構造体を初期化
sa.nLength = len(sa)

'ファイルハンドル取得
hFileName = Api_CreateFile(FileName, GENERIC_READ, 0, sa, OPEN_EXISTING, 0, 0)

'ファイルハンドルの値が有効(見つかったとき)
If hFileName <> INVALID_HANDLE_VALUE Then

    'ファイルサイズを取得
    FileSizeLow = Api_GetFileSize(hFileName, FileSizeHigh)

    'ファイルサイズの取得に失敗したときは
    If FileSizeLow = &HFFFFFFFF Then

        '拡張エラー情報を表示
        Print "取得に失敗しました。" 
    Else

        'ファイルサイズを表示
        Print FileName ":" FileSizeLow "Byte"
    End If

    'ファイルをクローズ
    Ret = Api_CloseHandle(hFileName)

'有効でないとき
Else

    'エラーを表示
    Print "ファイルを開けませんでした。"
End If

Stop
End