ファイル情報を取得 <TOP>
CreateFile 指定したファイルをオープンし、デバイスハンドルを返す
GetFileInformationByHandle 指定されたファイルに関する情報を取得
CloseHandle オープンされているオブジェクトハンドルをクローズ
FileTimeToLocalFileTime
世界協定時刻形式ファイル時間をローカルファイル時間に変換
FileTimeToSystemTime ファイルタイムをシステムタイムに変換
'================================================================ '= ファイル情報を取得 '= (GetFileInformationByHandle2.bas) '================================================================ #include "Windows.bi" #define INVALID_HANDLE_VALUE -1 '見つからない場合 #define GENERIC_READ -2147483648 '読み込みモード(&H80000000) #define OPEN_EXISTING 3 'ファイルをオープンする(存在しない場合失敗) #define FILE_ATTRIBUTE_ARCHIVE &H20 'アーカイブ属性を示す定数 #define FILE_ATTRIBUTE_COMPRETSED &H800 '圧縮属性を示す定数 #define FILE_ATTRIBUTE_DIRECTORY &H10 'ディレクトリ属性 #define FILE_ATTRIBUTE_HIDDEN &H2 '隠しファイル属性 #define FILE_ATTRIBUTE_NORMAL &H80 '他のファイル属性を持たない #define FILE_ATTRIBUTE_READONLY &H1 '読み込み専用属性 #define FILE_ATTRIBUTE_SYSTEM &H4 'システムファイル属性 #define FILE_ATTRIBUTE_TEMPORARY &H100 '一時ファイル属性を示す定数 Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer 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&) ' 世界協定時刻形式ファイル時間をローカルファイル時間に変換 Declare Function Api_FileTimeToLocalFileTime& Lib "kernel32" Alias "FileTimeToLocalFileTime" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) ' ファイルタイムをシステムタイムに変換 Declare Function Api_FileTimeToSystemTime& Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) Var Shared FileName As String Var Shared Text1 As Object Var Shared Edit1 As Object Var Shared List1 As Object Var Shared Button1 As Object Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 : List1.SetWindowSize 290, 74 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Edit1.SetWindowText "ファイルをドラッグ&ドロップしてください" End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hFile As Long Var sa As SECURITY_ATTRIBUTES Var bhfi As BY_HANDLE_FILE_INFORMATION Var ft As FILETIME Var st As SYSTEMTIME Var txt As String Var Ret As Long 'リストボックスを初期化 List1.ResetContent 'ファイル名を表示 Edit1.SetWindowText FileName 'セキュリティ構造体を初期化 sa.nLength = Len(sa) 'ファイルをオープン hFile = Api_CreateFile(FileName, GENERIC_READ, 0, sa, OPEN_EXISTING, 0, 0) 'ファイルハンドルの値が有効であるとき If hFile <> INVALID_HANDLE_VALUE Then 'ファイルに関する情報を取得 Ret = Api_GetFileInformationByHandle(hFile, bhfi) 'ファイルに関する情報を表示 If bhfi.dwFileAttributes And FILE_ATTRIBUTE_READONLY Then List1.AddString "属性 :" & "ReadOnly" End If If bhfi.dwFileAttributes And FILE_ATTRIBUTE_HIDDEN Then List1.AddString "属性 :" & "Hidden" End If If bhfi.dwFileAttributes And FILE_ATTRIBUTE_SYSTEM Then List1.AddString "属性 :" & "System" End If If bhfi.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY Then List1.AddString "属性 :" & "Directory" End If If bhfi.dwFileAttributes And FILE_ATTRIBUTE_ARCHIVE Then List1.AddString "属性 :" & "Archive" End If If bhfi.dwFileAttributes And FILE_ATTRIBUTE_NORMAL Then List1.AddString "属性 :" & "Normal" End If If bhfi.dwFileAttributes And FILE_ATTRIBUTE_TEMPORARY Then List1.AddString "属性 :" & "Temporary" End If If bhfi.dwFileAttributes And FILE_ATTRIBUTE_COMPRESSED Then List1.AddString "属性 :" & "Compressed" End If 'ファイルサイズを表示 List1.AddString "サイズ:" & Trim$(Format$(bhfi.nFileSizeLow, "#,###,###")) 'ファイルの作成日時をローカルファイル日付へ変換 Ret = Api_FileTimeToLocalFileTime(bhfi.ftCreationTime, ft) 'ファイルの作成日時をシステムファイル日付へ変換 Ret = Api_FileTimeToSystemTime(ft, st) 'ファイルの作成日時を表示 txt = "作成日:" & Trim$(Str$(st.wYear)) & "年" & Trim$(Str$(st.wMonth)) & "月" & Trim$(Str$(st.wDay)) & "日" & "(" & KMid$("日月火水木金土", st.wDayOfWeek + 1, 1) & ") " txt = txt & Trim$(Str$(st.wHour)) & "時" & Trim$(Str$(st.wMinute)) & "分" & Trim$(Str$(st.wSecond)) & "秒" List1.AddString txt 'ファイルの更新日時をローカルファイル日付へ変換 Ret = Api_FileTimeToLocalFileTime(bhfi.ftLastWriteTime, ft) 'ファイルの更新日時をシステムファイル日付へ変換 Ret = Api_FileTimeToSystemTime(ft, st) txt = "更新日:" & Trim$(Str$(st.wYear)) & "年" & Trim$(Str$(st.wMonth)) & "月" & Trim$(Str$(st.wDay)) & "日" & "(" & KMid$("日月火水木金土", st.wDayOfWeek + 1, 1) & ") " txt = txt & Trim$(Str$(st.wHour)) & "時" & Trim$(Str$(st.wMinute)) & "分" & Trim$(Str$(st.wSecond)) & "秒" List1.AddString txt 'ファイルのアクセス日時をローカルファイル日付へ変換 Ret = Api_FileTimeToLocalFileTime(bhfi.ftLastAccessTime, ft) 'ファイルのアクセス日時をシステムファイル日付へ変換 Ret = Api_FileTimeToSystemTime(ft, st) txt = "アクセス日:" & Trim$(Str$(st.wYear)) & "年" & Trim$(Str$(st.wMonth)) & "月" & Trim$(Str$(st.wDay)) & "日" & "(" & KMid$("日月火水木金土", st.wDayOfWeek + 1, 1) & ") " txt = txt & Trim$(Str$(st.wHour)) & "時" & Trim$(Str$(st.wMinute)) & "分" & Trim$(Str$(st.wSecond)) & "秒" List1.AddString txt ' ファイルをクローズ Ret = Api_CloseHandle(hFile) '有効でないとき Else 'エラーを表示 List1.AddString "ファイルを開けませんでした。" End If End Sub '================================================================ '= シェルドロップされたファイル名を取得 '================================================================ Declare Sub Edit1_DropFiles edecl (ByVal DF As Long) Sub Edit1_DropFiles(ByVal DF As Long) Var CN As Long CN = GetDropFileCount(DF) FileName = GetDropFileName(DF, 0) Edit1.SetWindowText FileName
End Sub
'================================================================
'=
'================================================================
While 1
WaitEvent
Wend
Stop
End