テンポラリフォルダとファイル名 <TOP>
テンポラリフォルダのファイル取得および作成
FindClose ファイルのハンドルを閉じる
CreateFile ファイルのハンドルを取得
GetFileTime ファイルのタイムスタンプを取得
FileTimeToSystemTime システムファイルタイムに変換
FileTimeToLocalFileTime ローカルタイムに変換
GetTempPath 一時フォルダ(テンポラリフォルダ)を取得
GetTempFileName 一時ファイル名取得(作成)
GetLongPathName ロングパス名を取得
ユニーク(一意)な名前を持つ空の一時ファイルを作成します。3文字までのプリフィクス(3文字以上の場合は先頭の3文字までが有効)と、システムが作成する最大4桁の16進数を加え、tmpという拡張子を持つファイル名が作成されます。例:xxxyyyy.tmp(xxx文字列、yyyy16進数文字列)
右:既存のファイルを一度開いてみた状態
テンポラリファイルは、3文字までのプリフィクスと16進数のテンポラリ番号で表される。
プリフィクスにabc、ファイル番号に0を入力した場合新たなファイルが作成されます。
'================================================================ '= テンポラリフォルダとファイル名 '= (GetTempFileNam.bas) '================================================================ #include "Windows.bi" 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 Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long 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&, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) ' システムファイルタイムに変換 Declare Function Api_FileTimeToSystemTime& Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) ' ローカルタイムに変換 Declare Function Api_FileTimeToLocalFileTime& Lib "kernel32" Alias "FileTimeToLocalFileTime" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) ' 一時フォルダ(テンポラリフォルダ)を取得 Declare Function Api_GetTempPath& Lib "Kernel32" Alias "GetTempPathA" (ByVal nBufferLength&, ByVal lpBuffer$) ' 一時ファイル名取得(作成) Declare Function Api_GetTempFileName& Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath$, ByVal lpPrefixString$, ByVal wUnique&, ByVal lpTempFileName$) ' ロングパス名を取得 Declare Function Api_GetLongPathName& Lib "Kernel32" Alias "GetLongPathNameA" (ByVal lpszShortPath$, ByVal lpszLongPath$, ByVal cchBuffer&) Var Shared Text(9) As Object Var Shared Edit1 As Object Var Shared Edit2 As Object For i = 0 To 9 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14 Next Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14 '================================================================ '= '================================================================ 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 Function LongPathName(strShortPathName As String) As String Function LongPathName(strShortPathName As String) As String Var Buffer As String Var Ret As Long Buffer = String$(256, Chr$(0)) On Error Goto *LongPathName_Error Ret = Api_GetLongPathName(strShortPathName, Buffer, Len(Buffer)) On Error Goto 0 ' 不正パスはNullを返す If Ret > 0 Then LongPathName = Left$(Buffer, InStr(Buffer, Chr$(0)) - 1) Else LongPathName = Chr$(0) End If Exit Function 'GetLongPathName未実装対策(For Windows95,WindowsNT4.0) *LongPathName_Error LongPathName = strShortPathName End Function '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var lpCreationTime As FILETIME Var lpLastAccessTime As FILETIME Var lpLastWriteTime As FILETIME Var lpLocalFileTime As FILETIME Var lpSystemTime As SYSTEMTIME Var Buffer As String * 256 '文字列バッファ Var Prefix As String 'プリフィクス(3文字まで) Var FileNo As Long 'テンポラリファイル番号 Var TempP As String 'テンポラリパス Var TempN As String 'テンポラリファイル名 Var TempL As String Var RetVal As Long Var Ret As Long 'プリフィクス取得 Prefix = Edit1.GetWindowText 'テンポラリファイル番号 FileNo = Val("&H" & EDit2.GetWindowText) 'テンポラリパス取得 Ret = Api_GetTempPath(256, Buffer) TempP = Left$(Buffer, Ret) 'テンポラリファイル名取得 Ret = Api_GetTempFileName(TempP, Prefix, FileNo, Buffer) TempN = Left$(Buffer, InStr(Buffer, Chr$(0)) - 1) Text(0).SetWindowText TempN TempL = LongPathName(TempN) Text(1).SetWindowText TempL 'ファイルのハンドル取得する Ret = Api_CreateFile(TempL, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) If Ret <> -1 Then 'ファイルスタンプを取得する RetVal = Api_GetFileTime(Ret, lpCreationTime, lpLastAccessTime, lpLastWriteTime) If RetVal <> 0 Then 'ファイルの新規作成日を取得 RetVal = Api_FileTimeToLocalFileTime(lpCreationTime, lpLocalFileTime) 'システムタイムに変換 RetVal = Api_FileTimeToSystemTime(lpLocalFileTime, lpSystemTime) If RetVal <> 0 Then ymd$ = Trim$(Str$(lpSystemTime.wYear)) & "/" & Right$(Str$(100 + lpSystemTime.wMonth), 2) & "/" & Right$(Str$(100 + lpSystemTime.wDay), 2) & " " hms$ = Right$(Str$(100 + lpSystemTime.wHour), 2) & ":" & Right$(Str$(100 + lpSystemTime.wMinute), 2) & ":" & Right$(Str$(100 + lpSystemTime.wSecond), 2) & " " week$ = "(" & WeekDay(lpSystemTime.wDayOfWeek) & ")" Text(2).SetWindowText ymd$ & hms$ & week$ End If '最終アクセス日を取得 RetVal = Api_FileTimeToLocalFileTime(lpLastAccessTime, lpLocalFileTime) 'システムタイムに変換 RetVal = Api_FileTimeToSystemTime(lpLocalFileTime, lpSystemTime) If RetVal <> 0 Then ymd$ = Trim$(Str$(lpSystemTime.wYear)) & "/" & Right$(Str$(100 + lpSystemTime.wMonth), 2) & "/" & Right$(Str$(100 + lpSystemTime.wDay), 2) & " " hms$ = Right$(Str$(100 + lpSystemTime.wHour), 2) & ":" & Right$(Str$(100 + lpSystemTime.wMinute), 2) & ":" & Right$(Str$(100 + lpSystemTime.wSecond), 2) & " " week$ = "(" & WeekDay(lpSystemTime.wDayOfWeek) & ")" Text(3).SetWindowText ymd$ & hms$ & week$ End If 'ファイルの最終更新日を取得 RetVal = Api_FileTimeToLocalFileTime(lpLastWriteTime, lpLocalFileTime) 'システムタイムに変換 RetVal = Api_FileTimeToSystemTime(lpLocalFileTime, lpSystemTime) If RetVal <> 0 Then ymd$ = Trim$(Str$(lpSystemTime.wYear)) & "/" & Right$(Str$(100 + lpSystemTime.wMonth), 2) & "/" & Right$(Str$(100 + lpSystemTime.wDay), 2) & " " hms$ = Right$(Str$(100 + lpSystemTime.wHour), 2) & ":" & Right$(Str$(100 + lpSystemTime.wMinute), 2) & ":" & Right$(Str$(100 + lpSystemTime.wSecond), 2) & " " week$ = "(" & WeekDay(lpSystemTime.wDayOfWeek) & ")" Text(4).SetWindowText ymd$ & hms$ & week$ End If End If End If Ret = Api_FindClose(Ret) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End