ファイルのタイムスタンプを取得          <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