UnderwareDESIGN

PlayBASIC => Resources => Source Codes => Topic started by: kevin on February 25, 2008, 10:36:53 AM

Title: File And System Dates
Post by: kevin on February 25, 2008, 10:36:53 AM
 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)