Set Creation Date for Folder

Share your advanced PureBasic knowledge/code with the community.
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Set Creation Date for Folder

Post by netmaestro »

Code: Select all

Procedure SetFolderCreationDate(folder.s, date.l) 

  ; netmaestro July 2007 

  #FILE_SHARE_DELETE = 4 
  
  Protected ft.filetime 
  Protected st.SYSTEMTIME 
  Protected tz.TIME_ZONE_INFORMATION 
  Protected result.l 
  
  GetTimeZoneInformation_(@tz) 
  date = AddDate(date, #PB_Date_Minute, tz\Bias) 
  If tz\DaylightDate 
    date = AddDate(date, #PB_Date_Minute, tz\DaylightBias) 
  EndIf 
  
  With st 
    \wYear   = Year(date) 
    \wMonth  = Month(date) 
    \wDay    = Day(date) 
    \wHour   = Hour(date) 
    \wMinute = Minute(date) 
    \wSecond = Second(date) 
  EndWith 
  
  SystemTimeToFileTime_(@st, @ft) 
  
  DesiredAccess = #GENERIC_READ|#GENERIC_WRITE 
  ShareMode     = #FILE_SHARE_READ|#FILE_SHARE_DELETE 
  Disposition   = #OPEN_EXISTING 
  Flags         = #FILE_FLAG_BACKUP_SEMANTICS 
  FolderHandle  = CreateFile_(folder, DesiredAccess, ShareMode, 0, Disposition, Flags, 0) 
  If FolderHandle 
    result = SetFileTime_(FolderHandle, @ft, #Null, #Null) 
    CloseHandle_(FolderHandle) 
  Else 
    result = 0 
  EndIf 

  ProcedureReturn result 
  
EndProcedure 

; Test proggie: 
; Set the chosen folder creation time to December 25, 2007 10:30 pm 

path.s = PathRequester("Choose a Folder:", GetPathPart(GetCurrentDirectory())) 
Debug SetFolderCreationDate(path, ParseDate("%yy/%mm/%dd/%hh/%ii/%ss", "07/12/25/22/30/00")) 
BERESHEIT