ファイルサイズの取得 <TOP>
ファイルサイズを取得します。
GetFileType オープンしているファイルのタイプを取得
CreateFile 指定したファイルをオープンし、デバイスハンドルを返す
GetFileSizeEx ファイルサイズの取得(64bit関数であり、F-BASICにはCurrencyがないので、ULARGE_INTEGER構造体によりHigh、Lowに分けて取り出します。)
CloseHandle 開かれているオブジェクトハンドルを閉じる
ファイル選択ボタンでファイルのオープンダイアログを呼び出し、ファイルを選択します。
選択されたファイルサイズを表示します。
'================================================================ '= ファイルサイズの取得 '= (GetFileSizeEx.bas) '================================================================ #include "Windows.bi" Type ULARGE_INTEGER LowPart As Long HighPart As Long End Type ' オープンしているファイルのタイプを取得 Declare Function Api_GetFileType& Lib "kernel32" Alias "GetFileType" (ByVal hFile&) ' 指定したファイルをオープンし、デバイスハンドルを返す 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_GetFileSizeEx& Lib "kernel32" Alias "GetFileSizeEx" (ByVal hFile&, lpFileSize As ULARGE_INTEGER) ' 開かれているオブジェクトハンドルを閉じる Declare Function Api_CloseHandle& Lib "kernel32" Alias "CloseHandle" (ByVal hObject&) #define GENERIC_READ -2147483648 '&H80000000 #define FILE_SHARE_READ &H1 '後続のオープン操作で読み取りアクセスが要求された場合、そのオープンを許可 #define FILE_Type_CHAR &H2 'キャラクタ型デバイス #define FILE_Type_DISK &H1 'ディスクファイル #define FILE_Type_PIPE &H3 'パイプ #define FILE_Type_UNKNOWN &H0 '不明 #define OPEN_EXISTING 3 'ファイルをオープンする Var Shared Text(5) As Object For i = 0 To 5 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) Next Var Shared sFile As String '================================================================ '= '================================================================ Declare Sub FileSizeGet edecl () Sub FileSizeGet() Var hFile As Long Var nSize As ULARGE_INTEGER Var sSave As String Var Ret As Long 'ファイルを開く hFile = Api_CreateFile(sFile, GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, ByVal 0&, ByVal 0&) 'ファイルサイズ取得 Ret = Api_GetFileSizeEx(hFile, nSize) 'ファイルの種類を検索 Select Case Api_GetFileType(hFile) Case FILE_Type_UNKNOWN sSave = "指定されたファイルのタイプは未知です。" Case FILE_Type_DISK sSave = "指定されたファイルはディスクファイルです。" Case FILE_Type_CHAR sSave = "指定されたファイルは、キャラクタファイル、通常LPTデバイスまたはコンソールです。" Case FILE_Type_PIPE sSave = "指定されたファイルは命名されたか匿名のパイプです。" End Select 'ファイルを閉じる Ret = Api_CloseHandle(hFile) Text(4).SetWindowText Format$((nSize.HighPart * 2 ^ 32 + nSize.LowPart) / (1000 ^ 2) * 1000000, "###,###,###") & " bytes" Text(5).SetWindowText sSave End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() For i = 3 To 5 Text(i).SetWindowText "" Next sFile = WinOpenDlg("ファイルのオープン", "C:\*.*", "全てのファイル(*.*)", 0) If sFile <> Chr$(&H1B) Then Text(3).SetWindowText sFile FileSizeGet End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End