HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0717
mmフォルダーの作成日取得7解決


mm

リンク

2008/7/17(Thu) 11:04:59|NO.17347

表題の通り、ファイルではなくフォルダーのタイムスタンプ取得がしたいのです。



この記事に返信する


flory

リンク

2008/7/17(Thu) 18:00:52|NO.17348

Win32APIのGetFileTime関数を使えばできるんですが、ちとややこしいのでサンプルを。
駆け足で作ったので、どこかおかしい箇所があるかも。。。

#module #uselib "kernel32.dll" #cfunc CreateFile "CreateFileA" sptr, int, int, int, int, int, int #func GetFileTime "GetFileTime" int, int, int, int #func CloseHandle "CloseHandle" int #func FileTimeToSystemTime "FileTimeToSystemTime" int, int #const GENERIC_READ $80000000 #const FILE_SHARE_READ $00000001 #const OPEN_EXISTING $00000003 #const FILE_FLAG_BACKUP_SEMANTICS $02000000 #const INVALID_HANDLE_VALUE $FFFFFFFF #deffunc _fxtget str folderName, array variable hFile = CreateFile(folderName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0) if hFile ! INVALID_HANDLE_VALUE { dim CreationTime, 4 ; 作成日時 dim LastAccessTime, 4 ; 最終アクセス日時 dim LastWriteTime, 4 ; 最終更新日時 GetFileTime hFile, varptr(CreationTime), varptr(LastAccessTime), varptr(LastWriteTime) CloseHandle hFile dim SystemTime, 4 FileTimeToSystemTime varptr(CreationTime), varptr(SystemTime) repeat 8 variable(cnt) = wpeek(SystemTime,cnt*2) loop dim SystemTime, 4 FileTimeToSystemTime varptr(LastWriteTime), varptr(SystemTime) repeat 8 variable(8+cnt) = wpeek(SystemTime,cnt*2) loop dim SystemTime, 4 FileTimeToSystemTime varptr(LastAccessTime), varptr(SystemTime) repeat 8 variable(16+cnt) = wpeek(SystemTime,cnt*2) loop return 0 } else { return 1 } #global ////////////////以下サンプル//////////////// folderName = "C:\\temp\\" ; フォルダ名を指定する dim timeStamp, 24 ; 配列の確保を忘れずに _fxtget folderName, timeStamp ; fxtget命令と同じように使える if stat = 0 { pos 0, 0 mes folderName pos 0, 36 mes "作成日時" mes " 年 : " + timeStamp(0) mes " 月 : " + timeStamp(1) mes " 曜日 : " + timeStamp(2) mes " 日 : " + timeStamp(3) mes " 時 : " + timeStamp(4) mes " 分 : " + timeStamp(5) mes " 秒 : " + timeStamp(6) mes " ミリ秒 : " + timeStamp(7) pos 160, 36 mes "最終更新日時" mes " 年 : " + timeStamp(8) mes " 月 : " + timeStamp(9) mes " 曜日 : " + timeStamp(10) mes " 日 : " + timeStamp(11) mes " 時 : " + timeStamp(12) mes " 分 : " + timeStamp(13) mes " 秒 : " + timeStamp(14) mes " ミリ秒 : " + timeStamp(15) pos 320, 36 mes "最終アクセス日時" mes " 年 : " + timeStamp(16) mes " 月 : " + timeStamp(17) mes " 曜日 : " + timeStamp(18) mes " 日 : " + timeStamp(19) mes " 時 : " + timeStamp(20) mes " 分 : " + timeStamp(21) mes " 秒 : " + timeStamp(22) mes " ミリ秒 : " + timeStamp(23) } else { pos 0, 0 mes folderName pos 0, 36 mes "タイムスタンプの取得に失敗しました" }

参考URL
http://m--takahashi.com/bbs/pastlog/03500/03495.html
その他、MSDNの各API該当ページ



mm

リンク

2008/7/17(Thu) 18:34:57|NO.17350

ゲッゲッ!こんなにやっかいなことになるんですか。
教えていただいたのをコピーしてテストしてみます。
解決のチェックはその後に。



mm

リンク

2008/7/17(Thu) 18:56:39|NO.17351

テストしてみたのですが、作成日もアクセス日も、フォルダーのプロパティとは9時間の差が出るんです。



raisen

リンク

2008/7/17(Thu) 19:47:45|NO.17352

世界標準時とか何とかが関係していると思います。
http://msdn.microsoft.com/ja-jp/library/cc429379.aspx

ありました
http://wisdom.sakura.ne.jp/system/winapi/win32/win112.html
FileTimeToLocalFileTime関数を使う



flory

リンク

2008/7/17(Thu) 20:32:13|NO.17354

ああすいませんすいませんすいません
やはり詰めが甘かったようです。
FileTimeToLocalFileTime関数のことは調べがついていたはずなのに、
モジュールに組み込むのを忘れていました。

というわけでモジュール差し替え↓

#module #uselib "kernel32.dll" #cfunc CreateFile "CreateFileA" sptr, int, int, int, int, int, int #func GetFileTime "GetFileTime" int, int, int, int #func CloseHandle "CloseHandle" int #func FileTimeToLocalFileTime "FileTimeToLocalFileTime" int, int #func FileTimeToSystemTime "FileTimeToSystemTime" int, int #const GENERIC_READ $80000000 #const FILE_SHARE_READ $00000001 #const OPEN_EXISTING $00000003 #const FILE_FLAG_BACKUP_SEMANTICS $02000000 #const INVALID_HANDLE_VALUE $FFFFFFFF #deffunc _fxtget str folderName, array variable hFile = CreateFile(folderName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0) if hFile ! INVALID_HANDLE_VALUE { dim CreationTime, 4 ; 作成日時 dim LastAccessTime, 4 ; 最終アクセス日時 dim LastWriteTime, 4 ; 最終更新日時 GetFileTime hFile, varptr(CreationTime), varptr(LastAccessTime), varptr(LastWriteTime) CloseHandle hFile dim LocalFileTime, 4 FileTimeToLocalFileTime varptr(CreationTime), varptr(LocalFileTime) dim SystemTime, 4 FileTimeToSystemTime varptr(LocalFileTime), varptr(SystemTime) repeat 8 variable(cnt) = wpeek(SystemTime,cnt*2) loop dim LocalFileTime, 4 FileTimeToLocalFileTime varptr(LastWriteTime), varptr(LocalFileTime) dim SystemTime, 4 FileTimeToSystemTime varptr(LocalFileTime), varptr(SystemTime) repeat 8 variable(8+cnt) = wpeek(SystemTime,cnt*2) loop dim LocalFileTime, 4 FileTimeToLocalFileTime varptr(LastAccessTime), varptr(LocalFileTime) dim SystemTime, 4 FileTimeToSystemTime varptr(LocalFileTime), varptr(SystemTime) repeat 8 variable(16+cnt) = wpeek(SystemTime,cnt*2) loop return 0 } else { return 1 } #global
本当にFileTimeToLocalFileTime関数を組み込んだだけなので、
汚いのは変わってませんが……。



mm

リンク

2008/7/18(Fri) 08:22:58|NO.17367

おお!ありがとうございます。ばっちり作成日が表示されます。
これで次に進めます。とてもお世話になりました。

こういうことが自分でもできるようになりたい。



黒色迷彩

リンク

2008/8/25(Mon) 15:57:27|NO.18684

あれ?
hspext.asで出来なかったっけ?



ONION software Copyright 1997-2023(c) All rights reserved.