File And System Dates
This example lets you get / set File Creation / Last Access & Write Dates on files.
[pbcode]
; PROJECT : File_Dates_And_System_Time
; AUTHOR : Kevin Picone
; CREATED : 2/25/2008
; EDITED : 2/26/2008
; ---------------------------------------------------------------------
; *=-----------------------------------------------------------------=*
;
; >> File Creation/Last Access & Write Dates V001 <<
;
; By Kevin Picone
;
; (c) copyright 2008 by Kevin Picone, All Rights Reserved
;
; *=-----------------------------------------------------------------=*
; www.underwaredesign.com - www.PlayBasic.com
; *=-----------------------------------------------------------------=*
linkDll "kernel32"
APICreateFile(FileName$, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile) alias "CreateFileA" as integer
APICloseHandle(hFile) alias "CloseHandle" as integer
GetLocalTime(SYSTEMTIME_Pointer) alias "GetLocalTime" as integer
GetSystemTime(SYSTEMTIME_Pointer) alias "GetSystemTime" as integer
GetTimeZoneInformation(TIMEZONE_POINTER) alias "GetTimeZoneInformation" as integer
; Convert System Time To File Time and back again
SystemTimeToFileTime(SYSTEMTIME_Pointer,FILETIME_POINTER) alias "SystemTimeToFileTime" as integer
FileTimeToSystemTime(FILETIME_POINTER,SYSTEMTIME_Pointer) alias "FileTimeToSystemTime" as integer
; Set/Get The FileTimes
SetFileTime(hFile,CreationTime_FILETIME_POINTER,LastAccessTime_FILETIME_Pointer,LastWriteTime_FILETIME_Pointer) alias "SetFileTime" as integer
GetFileTime(hFile,CreationTime_FILETIME_POINTER,LastAccessTime_FILETIME_Pointer,LastWriteTime_FILETIME_Pointer) alias "GetFileTime" as integer
EndLinkDll
; Build the SYSTEM TIME STRUCTURE
acset =0
Constant SYSTEMTIME_wYear =ac(2)
Constant SYSTEMTIME_wMonth =ac(2);
Constant SYSTEMTIME_wDayOfWeek =ac(2);
Constant SYSTEMTIME_wDay =ac(2)
Constant SYSTEMTIME_wHour =ac(2)
Constant SYSTEMTIME_wMinute =ac(2)
Constant SYSTEMTIME_wSecond =ac(2)
Constant SYSTEMTIME_wMilliseconds =ac(2)
Constant SYSTEMTIME_StructSize =ac(1)
; Build the FILE TIME STRUCTURE
acset =0
Constant FILETIME_dwLowDate =ac(4)
Constant FILETIME_dwHighDate =ac(4)
Constant FILETIME_StructSize =ac(1)
; Create File Access Types
Constant OPEN_EXISTING = 3
Constant CREATE_ALWAYS = 2
Constant OPEN_ALWAYS = 4
Constant FILE_SHARE_READ = $1
Constant FILE_SHARE_WRITE = $2
Constant GENERIC_WRITE = $40000000
Constant GENERIC_READ = $80000000
Constant INVALID_HANDLE_VALUE= -1
; Alloc a Bank to hold the ST structure
SysTime=NewBank(SYSTEMTIME_StructSize)
; Alloc a Bank to hold the FILETIME structure
FileTime=NewBank(FILETIME_StructSize)
; Allocate some Banks (memory) for FILETIME and SYSTEMTIME structures
FileCreationTime=NewBank(FILETIME_StructSize)
FileCreationSystemTime=NewBank(SYSTEMTIME_StructSize)
; Filename of
Filename$="C:\Testing_Changing_File_Dates.txt"
; Make a file
if FileExist(BackupFilename$) then DeleteFile BackupFilename$
Makefile BackupFilename$,40000
; get the Files Current Creation/Last access & Last Write Dates
GetFileCreationTime(filename$,getBankPtr(FileCreationTime))
FileTimeToSystemTime(getBankPtr(FileCreationTime),getBankPtr(FileCreationSystemTime))
Print "File Creation Time"
ShowSystemTime(FileCreationSystemTime)
GetFileLastAccessTime(filename$,getBankPtr(FileCreationTime))
FileTimeToSystemTime(getBankPtr(FileCreationTime),getBankPtr(FileCreationSystemTime))
Print "File Last Access Time"
ShowSystemTime(FileCreationSystemTime)
GetFileLastWriteTime(filename$,getBankPtr(FileCreationTime))
FileTimeToSystemTime(getBankPtr(FileCreationTime),getBankPtr(FileCreationSystemTime))
Print "File Last Write Time"
ShowSystemTime(FileCreationSystemTime)
print "-------------------------------------------"
; Build a new File Creation System Time
SetST_DateString("1 feb 1999",FileCreationSystemTime)
SetST_TimeString("02:02:44 AM",FileCreationSystemTime)
; Show it
ShowSystemTime(FileCreationSystemTime)
; Convert SYSTEM Time to FILE TIME
SystemTimeToFileTime(getBankPtr(FileCreationSystemTime),getBankPtr(FileCreationTime))
; Set the CREATION DATE
SetFileCreationTime(filename$,getBankPtr(FileCreationTime))
SetFileLastAccessTime(filename$,getBankPtr(FileCreationTime))
SetFileLastWriteTime(filename$,getBankPtr(FileCreationTime))
Sync
waitkey
; Set App's frame Rate
SetFps 50
; Start of Do/Loop
Do
Cls 0
if SysTime
GetLocalTime(getBankPtr(SysTime))
ShowSystemTime(SysTime)
; Convert System Time to File Time
SystemTimeToFileTime(GetBankPtr(SysTime),GetBankPtr(FileTime))
Date$=GetST_DateString(SysTime)
Time$=GetST_TimeString(SysTime)
SetST_DateString(Date$,SysTime)
SetST_TimeString(Time$,SysTime)
SetST_DateString("1 Jan 2000",SysTime)
SetST_TimeString("10:10:55 PM",SysTime)
ShowSystemTime(SysTime)
endif
Sync
loop
Function SetFileCreationTime(filename$,CreationTime_FILETIME_POINTER )
hFile=APICreateFile(FileName$, GENERIC_WRITE, 0, 0,OPEN_ALWAYS , 0,0)
if hFile<>INVALID_HANDLE_VALUE
SetFileTime(hFile,CreationTime_FILETIME_POINTER,LastAccessTime_FILETIME_Pointer,LastWriteTime_FILETIME_Pointer)
APICloseHandle(hFIle)
endif
EndFunction
Function SetFileLastAccessTime(filename$,LastAccessTime_FILETIME_Pointer)
hFile=APICreateFile(FileName$, GENERIC_WRITE, 0, 0,OPEN_ALWAYS , 0,0)
if hFile<>INVALID_HANDLE_VALUE
SetFileTime(hFile,CreationTime_FILETIME_POINTER,LastAccessTime_FILETIME_Pointer,LastWriteTime_FILETIME_Pointer)
APICloseHandle(hFIle)
endif
EndFunction
Function SetFileLastWriteTime(filename$,LastWriteTime_FILETIME_Pointer )
hFile=APICreateFile(FileName$, GENERIC_WRITE, 0, 0,OPEN_ALWAYS , 0,0)
if hFile<>INVALID_HANDLE_VALUE
SetFileTime(hFile,CreationTime_FILETIME_POINTER,LastAccessTime_FILETIME_Pointer,LastWriteTime_FILETIME_Pointer)
APICloseHandle(hFIle)
endif
EndFunction
Function GetFileCreationTime(filename$,CreationTime_FILETIME_POINTER )
hFile=APICreateFile(FileName$, GENERIC_OPEN, 0, 0, OPEN_EXISTING, 0,0)
if hFile<>INVALID_HANDLE_VALUE
GetFileTime(hFile,CreationTime_FILETIME_POINTER,LastAccessTime_FILETIME_Pointer,LastWriteTime_FILETIME_Pointer)
APICloseHandle(hFIle)
endif
EndFunction
Function GetFileLastAccessTime(filename$,LastAccessTime_FILETIME_Pointer )
hFile=APICreateFile(FileName$, 0, 0, 0, OPEN_EXISTING, 0,0)
if hFile<>INVALID_HANDLE_VALUE
GetFileTime(hFile,CreationTime_FILETIME_POINTER,LastAccessTime_FILETIME_Pointer,LastWriteTime_FILETIME_Pointer)
APICloseHandle(hFIle)
endif
EndFunction
Function GetFileLastWriteTime(filename$,LastWriteTime_FILETIME_Pointer )
hFile=APICreateFile(FileName$, 0, 0, 0, OPEN_EXISTING, 0,0)
if hFile<>INVALID_HANDLE_VALUE
GetFileTime(hFile,CreationTime_FILETIME_POINTER,LastAccessTime_FILETIME_Pointer,LastWriteTime_FILETIME_Pointer)
APICloseHandle(hFIle)
endif
EndFunction
Function ShowSystemTime(SysTimeBank)
Print GetST_DateString(SysTimeBank)
Print GetST_TimeString(SysTimeBank)
EndFunction
constant DayAndTime_MONTHs$="Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
Psub DT_ConvertMonthIndexToName(Index)
if index<1 Then Index=1
if index>12 Then Index=12
result$=mid$(DayAndTime_MONTHs$,1+((Index-1)*4),3)
EndPsub Result$
Function GetST_DateString(SystemTimeBank)
if SystemTimebank
y=peekbankword(SystemTimeBank,SYSTEMTIME_wYear)
m=peekbankword(SystemTimeBank,SYSTEMTIME_wMonth)
d=peekbankword(SystemTimeBank,SYSTEMTIME_wDay)
result$=Digits$(d,2)+" "+ DT_ConvertMonthIndexToName(m)+" "+Digits$(y,4)
endif
EndFunction result$
Function SetST_DateString(DateFormatedString$,SystemTimeBank)
if SystemTimebank
DateFormatedString$=trim$(DateFormatedString$," "+chr$(9))
Dim DateTokens$(3)
TokensFound=SplitToArray(DateFormatedString$," ",DateTokens$(),1)
if TokensFound>0
d=val(DateTokens$(1))
y=val(DateTokens$(3))
pos=instring( upper$(DayAndTime_MONTHs$), upper$(DateTokens$(2)), 1,0)
m=((pos-1)/4)+1
PokeBankWord SystemTimeBank,SYSTEMTIME_wYear,y
PokeBankWord SystemTimeBank,SYSTEMTIME_wMonth,m
PokeBankWord SystemTimeBank,SYSTEMTIME_wDay,d
endif
unDim DateTokens$()
endif
EndFunction result$
Function GetST_TimeString(SystemTimeBank)
if SystemTimebank
h=PeekBankWord(SystemTimeBank,SYSTEMTIME_wHour)
m=PeekBankWord(SystemTimeBank,SYSTEMTIME_wMinute)
s=PeekBankWord(SystemTimeBank,SYSTEMTIME_wSecond)
Result$=digits$(mod(h,12),2)+":"+digits$(m,2)+":"+digits$(s,2)
if h<12
Result$=Result$+" AM"
else
Result$=Result$+" PM"
endif
endif
EndFunction result$
Function SetST_TimeString(TimeFormatedString$,SystemTimeBank)
if SystemTimebank
TimeFormatedString$=Upper$(TimeFormatedString$)
h=Val(mid$(TimeFormatedString$,1,2))
m=Val(mid$(TimeFormatedString$,4,2))
s=Val(mid$(TimeFormatedString$,7,2))
if Instring(TimeFormatedString$,"PM",1,0)
h=h+12
endif
POkeBankWord SystemTimeBank,SYSTEMTIME_wHour,h
PokeBankWord SystemTimeBank,SYSTEMTIME_wMinute,M
PokeBankWord SystemTimeBank,SYSTEMTIME_wSecond,s
endif
EndFunction result$
[/pbcode]
----- [ Keywords ] -------------------------------------------------------------------------
File - Date - Time
PlayBASIC Documentation - FILE COMMANDS (https://playbasic.com/help.php?page=FILES.INDEX)