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


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

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

GetFileInformationByHandle 指定されたファイルに関する情報を取得

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

 

選択したファイルのサイズを取得します。

 

'================================================================
'= ファイルサイズの取得(V)
'=    (GetFileInformationByHandle.bas)
'================================================================
#include "Windows.bi"

#define OPEN_EXISTING 3                 'ファイルをオープンする(存在しない場合失敗)

Type FILETIME
    dwLowDateTime  As Long
    dwHighDateTime As Long
End Type

Type BY_HANDLE_FILE_INFORMATION
    dwFileAttributes     As Long
    ftCreationTime       As FILETIME
    ftLastAccessTime     As FILETIME
    ftLastWriteTime      As FILETIME
    dwVolumeSerialNumber As Long
    nFileSizeHigh        As Long
    nFileSizeLow         As Long
    nNumberOfLinks       As Long
    nFileIndexHigh       As Long
    nFileIndexLow        As Long
End Type

' 指定したファイルをオープンし、デバイスハンドルを返す
Declare Function Api_CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName$, ByVal dwDesiredAccess&, ByVal dwShareMode&, lpSecurityAttributes As Any, ByVal dwCreationDisposition&, ByVal dwFlagsAndAttributes&, ByVal hTemplateFile&)

' 指定されたファイルに関する情報を取得
Declare Function Api_GetFileInformationByHandle& Lib "kernel32" Alias "GetFileInformationByHandle" (ByVal hFile&, lpFileInformation As BY_HANDLE_FILE_INFORMATION)

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

Var Shared FileName As String

Var Shared Text1 As Object
Var Shared Edit1 As Object
Var Shared Button1 As Object
Var Shared Button2 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Edit1.SetWindowText ""

    FileName = WinOpenDlg("ファイルのオープン","C:\*.*","全てのファイル(*.*)", 0)
    If FileName <> Chr$(&H1B) Then
        Edit1.SetWindowText FileName
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var hFile As Long
    Var FileInfo As BY_HANDLE_FILE_INFORMATION
    Var Ret As Long

    'ファイルをオープンし、デバイスハンドルを返す
    hFile = Api_CreateFile(FileName, 0, 0, ByVal 0, OPEN_EXISTING, 0, ByVal 0)

    'ファイルに関する情報を取得
    Ret = Api_GetFileInformationByHandle(hFile, FileInfo)

    'ハンドルをクローズ
    Ret = Api_CloseHandle(hFile)

    '結果表示
    Edit1.SetWindowText FileName & Chr$(13, 10) & "File size: " & format$(FileInfo.nFileSizeLow, "###,###,### バイト")
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End