ファイルのタイムスタンプを取得 <TOP>
選択したファイルのタイムスタンプを取得します。新規作成年月日・時間・曜日、最終更新年月日・時間・曜日および最終アクセス年月日・時間・曜日を取得します。
CreateFile ファイルのハンドルを取得
GetFileTime ファイルスタンプを取得
FileTimeToSystemTime システムファイルタイムに変換
FileTimeToLocalFileTime ローカルタイムに変換
FindClose ファイルのハンドルを閉じる
'================================================================ '= ファイルのタイムスタンプを取得 '= (FileTime.bas) '================================================================ #include "Windows.bi" Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Type SYSTEMTIME wYear As Integer '年 wMonth As Integer '月 (1月=1、2月=2・・・) wDayOfWeek As Integer '曜日 (日曜=0、月曜=1・・) wDay As Integer '日 wHour As Integer '時 wMinute As Integer '分 wSecond As Integer '秒 wMilliseconds As Integer 'ミリ秒 End Type Type FILETIME dwLowDateTime As Long '下位32ビット値 dwHighDateTime As Long '上位32ビット値 End Type #define GENERIC_READ -2147483648 '&H80000000 #define GENERIC_WRITE &H40000000 ' #define FILE_SHARE_READ &H1 '後続のオープン操作で読み取りアクセスが要求された場合、そのオープンを許可 #define FILE_SHARE_WRITE &H2 '後続のオープン操作で書き込みアクセスが要求された場合、そのオープンを許可 #define CREATE_NEW 1 ' #define CREATE_ALWAYS 2 ' #define OPEN_EXISTING 3 'ファイルをオープンする #define OPEN_ALWAYS 4 ' #define TRUNCATE_EXISTING 5 ' #define FILE_ATTRIBUTE_ARCHIVE &H20 'アーカイブ属性を示す定数 #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 '一時ファイル属性を示す定数 #define FILE_FLAG_WRITE_THROUGH -2147483648 'キャッシュに書き込まれたデータをそのまま直接ディスクに書き込むようにする(&H8000 #define FILE_FLAG_OVERLAPPED &H40000000 '時間のかかる処理に対してReadFile関数やWriteFile関数でERROR_IO_PENDING拡張エラー・ #define FILE_FLAG_NO_BUFFERING &H20000000 'システムキャッシュを使用せずにファイルをオープンするように指定 #define FILE_FLAG_RANDOM_ACCESS &H10000000 'ファイルにランダムアクセスすることをシステムに示す #define FILE_FLAG_SEQUENTIAL_SCAN &H8000000 'ファイルにシーケンシャルアクセスすることをシステムに示す #define FILE_FLAG_DELETE_ON_CLOSE &H4000000 'そのファイルを指すすべてのファイルのハンドルがクローズされた時に、そのファイルを #define FILE_FLAG_POSIX_SEMANTICS &H1000000 'POSIXの規則に従ってファイルにアクセス ' ファイルのハンドルを閉じる Declare Function Api_FindClose& Lib "kernel32" Alias "FindClose" (ByVal hFindFile&) ' ファイルのハンドルをGET Declare Function Api_CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName$, ByVal dwDesiredAccess&, ByVal dwShareMode&, ByVal lpSecurityAttributes&, ByVal dwCreationDisposition&, ByVal dwFlagsAndAttributes&, ByVal hTemplateFile&) ' ファイルスタンプを取得する Declare Function Api_GetFileTime& Lib "kernel32" Alias "GetFileTime" (ByVal hFile&, CreationTime As FILETIME, LastAccessTime As FILETIME, LastWriteTime As FILETIME) ' システムファイルタイムに変換 Declare Function Api_FileTimeToSystemTime& Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, SystemTime As SYSTEMTIME) ' ローカルタイムに変換 Declare Function Api_FileTimeToLocalFileTime& Lib "kernel32" Alias "FileTimeToLocalFileTime" (lpFileTime As FILETIME, LocalFileTime As FILETIME) Var Shared Text(7) As object Var Shared Button(1) As Object For i = 0 To 7 If i < 2 Then Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1))) Button(i).SetFontSize 14 End If Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) Text(i).SetFontSize 14 Next Var Shared FileName As String '================================================================ '= '================================================================ Declare Function WeekDay(Str As Integer) As String Function WeekDay(Str As Integer) As String Select Case Str Case 0 WeekDay = "日" Case 1 WeekDay = "月" Case 2 WeekDay = "火" Case 3 WeekDay = "水" Case 4 WeekDay = "木" Case 5 WeekDay = "金" Case 6 WeekDay = "土" End Select End Function '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() For i = 4 To 7 Text(i).SetWindowText "" Next FileName = WinOpenDlg("ファイルのオープン", "*.*", "全てのファイル(*.*)", 0) If FileName <> Chr$(&H1B) Then Text(4).SetWindowText FileName End If End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var CreationTime As FILETIME Var LastAccessTime As FILETIME Var LastWriteTime As FILETIME Var LocalFileTime As FILETIME Var SystemTime As SYSTEMTIME Var Ret As Long 'ファイルのハンドル取得する Ret = Api_CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) If Ret <> -1 Then 'ファイルスタンプを取得 Ret = Api_GetFileTime(Ret, CreationTime, LastAccessTime, LastWriteTime) If Ret <> 0 Then 'ファイルの新規作成日を取得 Ret = Api_FileTimeToLocalFileTime(CreationTime, LocalFileTime) 'システムタイムに変換 Ret = Api_FileTimeToSystemTime(LocalFileTime, SystemTime) If Ret <> 0 Then ymd$ = Trim$(Str$(SystemTime.wYear)) & "/" & Right$(Str$(100 + SystemTime.wMonth), 2) & "/" & Right$(Str$(100 + SystemTime.wDay), 2) & " " hms$ = Right$(Str$(100 + SystemTime.wHour), 2) & ":" & Right$(Str$(100 + SystemTime.wMinute),2) & ":" & Right$(Str$(100 + SystemTime.wSecond),2) & " " week$ = "(" & WeekDay(SystemTime.wDayOfWeek) & ")" Text(5).SetWindowText ymd$ & hms$ & week$ End If '最終アクセス日を取得 Ret = Api_FileTimeToLocalFileTime(LastAccessTime, LocalFileTime) 'システムタイムに変換 Ret = Api_FileTimeToSystemTime(LocalFileTime, SystemTime) If Ret <> 0 Then ymd$ = Trim$(Str$(SystemTime.wYear)) & "/" & Right$(Str$(100 + SystemTime.wMonth), 2) & "/" & Right$(Str$(100 + SystemTime.wDay), 2) & " " hms$ = Right$(Str$(100 + SystemTime.wHour),2) & ":" & Right$(Str$(100 + SystemTime.wMinute), 2) & ":" & Right$(Str$(100 + SystemTime.wSecond), 2) & " " week$ = "(" & WeekDay(SystemTime.wDayOfWeek) & ")" Text(6).SetWindowText ymd$ & hms$ & week$ End If 'ファイルの最終更新日を取得 Ret = Api_FileTimeToLocalFileTime(LastWriteTime, LocalFileTime) 'システムタイムに変換 Ret = Api_FileTimeToSystemTime(LocalFileTime, SystemTime) If Ret <> 0 Then ymd$ = Trim$(Str$(SystemTime.wYear)) & "/" & Right$(Str$(100 + SystemTime.wMonth), 2) & "/" & Right$(Str$(100 + SystemTime.wDay), 2) & " " hms$ = Right$(Str$(100 + SystemTime.wHour), 2) & ":" & Right$(Str$(100 + SystemTime.wMinute), 2) & ":" & Right$(Str$(100 + SystemTime.wSecond), 2) & " " week$ = "(" & WeekDay(SystemTime.wDayOfWeek) & ")" Text(7).SetWindowText ymd$ & hms$ & week$ End If End If End If Ret = Api_FindClose(Ret) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End