|
|
2020/5/22(Fri) 21:12:30|NO.90613
GetFileTime関数を使って、ファイルの作成日時を取得したいです。
いろいろ調べてやってみたのですが、うまくいきません。
どうすればうまくいくのでしょうか?
#uselib "kernel32.dll"
#func CreateFile "CreateFileA" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#define GENERIC_READ $80000000
#define FILE_SHARE_READ $00000001
#define OPEN_EXISTING $00000003
#define FILE_ATTRIBUTE_NORMAL $00000080
#func GetFileTime "GetFileTime" sptr,sptr,sptr,sptr
#func FileTimeToSystemTime "FileTimeToSystemTime" sptr,sptr
#func CloseHandle "CloseHandle" sptr
// 対象にするファイルを作成
sdim sFile
notesel sFile
notesave "test.txt"
// アクセスできるようにする?
CreateFile dir_cur+"\\test.txt", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
hFile = stat
// ファイルの作成日時を取得する
dim FILETIME,2
GetFileTime hFile, varptr(FILETIME), 0, 0
if stat{
// システム時刻に変換する
dim SYSTEMTIME,8
FileTimeToSystemTime varptr(FILETIME), varptr(SYSTEMTIME)
repeat 8
mes strf("%d:%d", cnt, SYSTEMTIME.cnt)
loop
}
CloseHandle hFile // ハンドルを閉じる
|
|
2020/5/22(Fri) 22:00:36|NO.90615
#uselib "kernel32.dll"
#func CreateFile "CreateFileA" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#define GENERIC_READ $80000000
#define FILE_SHARE_READ $00000001
#define OPEN_EXISTING $00000003
#define FILE_ATTRIBUTE_NORMAL $00000080
#func GetFileTime "GetFileTime" sptr,sptr,sptr,sptr
#func FileTimeToSystemTime "FileTimeToSystemTime" sptr,sptr
#func CloseHandle "CloseHandle" sptr
// 対象にするファイルを作成
sdim sFile
notesel sFile
notesave "test.txt"
// アクセスできるようにする?
CreateFile dir_cur+"\\test.txt", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
hFile = stat
// ファイルの作成日時を取得する
dim FILETIME,2
GetFileTime hFile, varptr(FILETIME), 0, 0
if stat{
// システム時刻に変換する
dim SYSTEMTIME,4
FileTimeToSystemTime varptr(FILETIME), varptr(SYSTEMTIME)
repeat 8
mes strf("%d:%d", cnt, wpeek(SYSTEMTIME, cnt * 2))
loop
}
CloseHandle hFile // ハンドルを閉じる
|
|
2020/5/22(Fri) 22:25:05|NO.90617
勝手に補足
時間がおかしいと思ったら、取得した時間がUTCになっているので
GetFileTime関数のあとに
FileTimeToLocalFileTime関数でローカル時間に修正し
ローカル時間をFileTimeToSystemTime関数に渡すと
日本時間が取得できますよ。
|
|
2020/5/23(Sat) 13:43:15|NO.90620
できました!
お二人ともありがとうございました!
// test2.txtを作成して、作成日時を取得する
#uselib "kernel32.dll"
#func CreateFile "CreateFileA" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#define GENERIC_READ $80000000
#define FILE_SHARE_READ $00000001
#define OPEN_EXISTING $00000003
#define FILE_ATTRIBUTE_NORMAL $00000080
#func GetFileTime "GetFileTime" sptr,sptr,sptr,sptr
#func FileTimeToLocalFileTime "FileTimeToLocalFileTime" sptr,sptr
#func FileTimeToSystemTime "FileTimeToSystemTime" sptr,sptr
#func CloseHandle "CloseHandle" sptr
// 対象にするファイルを作成
sdim sFile
notesel sFile
notesave "test2.txt"
// アクセスできるようにする?
CreateFile dir_cur+"\\test2.txt", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
hFile = stat
// ファイルのタイムスタンプを取得する
dim FILETIME,2
GetFileTime hFile, varptr(FILETIME), 0, 0
if stat{
// ローカル時間に変換する
dim FILETIME_LocalTime,4
FileTimeToLocalFileTime varptr(FILETIME), varptr(FILETIME_LocalTime)
// システム時間に変換する
dim SYSTEMTIME,4
FileTimeToSystemTime varptr(FILETIME_LocalTime), varptr(SYSTEMTIME)
// 表示
mes strf("作成日時:%d/%d/%d %d:%d", wpeek(SYSTEMTIME,0*2), wpeek(SYSTEMTIME,1*2), wpeek(SYSTEMTIME,3*2), wpeek(SYSTEMTIME,4*2), wpeek(SYSTEMTIME,5*2) )
}
CloseHandle hFile // ハンドルを閉じる
| |
|