Seite 1 von 1

Ordnerdatum & Dateidatum ändern

Verfasst: 31.03.2012 02:57
von BSP
Hallo.
Weil soetwas nachgefragt wurde, möchte ich Euch mein kleines Programm
zum ändern / einstellen der Ordner & Dateizeiten vorstellen.
Ich hoffe, es gefällt und Ihr könnt etwas damit anfangen.

Noch einen Hinweis:
Manchmal werden vom Win- Explorer die Ordnerzeiten nicht richtig angezeigt,
obwohl laut Eigenschaftenfenster die Einstellungen übernommen wurden.
Dann müsst Ihr den Schreibschutz für den Ordner entfernen.
Danach sollte dann alles stimmen.

Gruß: Bernd

Code: Alles auswählen

EnableExplicit

#HWnd = 1

Enumeration
#Datgadg
#ChBGadg
#FAuswahlButt
#LosButt
#EndButt
#TxtGadg1
#TxtGadg2
#combogadg1
#combogadg2
EndEnumeration

Define pfad$="C:\Temp\";GetCurrentDirectory()
Define ende
Global datum$ = FormatDate("%dd.%mm.%yyyy",Date())
Global flag = #PB_Date_Created

Procedure SetFolderDate(sFolder.s,flag,Zeit)

  Protected fHandle.l
  Protected ftCreation.FILETIME
  Protected ftLastAccess.FILETIME
  Protected ftLastWrite.FILETIME
  Protected LocalFileTime.FILETIME
  Protected LocalSystemTime.SYSTEMTIME
 
  ; ggf. abschließenden Backslash hinzufügen
  If Right(sFolder, 1) <> "\" : sFolder = sFolder + "\" : EndIf
    
  fHandle = CreateFile_(sFolder, #GENERIC_READ | #GENERIC_WRITE, #FILE_SHARE_READ | #FILE_SHARE_WRITE,  0, #OPEN_EXISTING, #FILE_FLAG_BACKUP_SEMANTICS, 0)
  If fHandle <> -1 
    ; Zeitinformationen des Ordners auslesen
    If GetFileTime_(fHandle, ftCreation, ftLastAccess, ftLastWrite) <> 0 
    ; Eigene Zeiten in die Zeitstruktur eintragen
        With LocalSystemTime
          \wDay    = Day(zeit)
          \wMonth  = Month(zeit)
          \wYear   = Year(zeit)
          \wHour   = Hour(zeit)
          \wMinute = Minute(zeit)
          \wSecond = Second(zeit)
      EndWith
    ; und in eine Filezeit umwandeln
      SystemTimeToFileTime_(LocalSystemTime, LocalFileTime)
      Select flag
      Case #PB_Date_Created
        LocalFileTimeToFileTime_(LocalFileTime, ftCreation)
      Case #PB_Date_Accessed
        LocalFileTimeToFileTime_(LocalFileTime, ftLastAccess)
      Case #PB_Date_Modified
        LocalFileTimeToFileTime_(LocalFileTime, ftLastWrite)
      EndSelect
    ; Nun die neuen Zeiten eintragen
      SetFileTime_(fHandle, ftCreation, ftLastAccess, ftLastWrite)
    ; Verzeichnis schließen
      CloseHandle_ (fHandle)
    EndIf
  EndIf
EndProcedure

Procedure AendereDatum(Pfad$)
  Protected Zeit$ ,file$
  Protected ok
  
  If GetGadgetState(#combogadg1)=0 Or GetGadgetState(#combogadg1)=2
    zeit$=datum$+":"+FormatDate("%hh.%ii",Date())
    SetFolderDate(pfad$,flag,ParseDate("%dd.%mm.%yyyy:%hh.%ii",zeit$))
  EndIf
  
  ok = ExamineDirectory(#PB_Any, pfad$, "*.*") 
  If ok 
    While NextDirectoryEntry(ok)
      If DirectoryEntryType(ok) = #PB_DirectoryEntry_File
        If GetGadgetState(#combogadg1)=1 Or GetGadgetState(#combogadg1)=2
          zeit$=datum$+":"+FormatDate("%hh.%ii",Date())
          file$=pfad$+DirectoryEntryName(ok)
          SetFileDate(file$,flag,ParseDate("%dd.%mm.%yyyy:%hh.%ii",zeit$))
        EndIf
      Else
        If GetGadgetState(#ChBGadg)
          If Not (DirectoryEntryName(ok)="." Or DirectoryEntryName(ok)="..")
            file$=pfad$+DirectoryEntryName(ok)+"\"
            AendereDatum(file$)
          EndIf
        EndIf
      EndIf
    Wend
    FinishDirectory(ok)
  EndIf

EndProcedure

; --- Window
OpenWindow(#HWnd , 0,0,300,200,"Dateidatum einstellen",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

TextGadget(#TxtGadg1,4,4,292,22,"Datum einstellen !")
ComboBoxGadget(#combogadg1,100,30,120,22)
  AddGadgetItem(#combogadg1,0,"Nur Ordner")
  AddGadgetItem(#combogadg1,1,"Nur Dateien")
  AddGadgetItem(#combogadg1,2,"Ordner + Dateien")
  SetGadgetState(#combogadg1,0)
DateGadget(#Datgadg,4,60,80,22,"%dd.%mm.%yyyy",Date())
ComboBoxGadget(#combogadg2,100,60,120,22)
  AddGadgetItem(#combogadg2,0,"Erstellungsdatum")
  AddGadgetItem(#combogadg2,1,"Letzter Zugriff")
  AddGadgetItem(#combogadg2,2,"Letzte Änderung")
  SetGadgetState(#combogadg2,0)
ButtonGadget(#FAuswahlButt,4,90,80,30,"Ordner")
CheckBoxGadget(#ChBGadg,100,92,200,22,"Unterordner einbeziehen")
TextGadget(#TxtGadg2,4,126,292,22,"",#PB_Text_Border|#PB_Text_Right)
  SetGadgetText(#TxtGadg2,Pfad$)
ButtonGadget(#LosButt,4,166,60,30,"Los")
ButtonGadget(#EndButt,216,166,80,30,"Ende")


; --- Hauptschleife
Repeat
  Select WaitWindowEvent()
  Case #PB_Event_CloseWindow
    ende=1
    
  Case #PB_Event_Gadget
    Select EventGadget()
    Case #EndButt
      ende=1
      
    Case #FAuswahlButt
      pfad$=PathRequester("Ordner wählen",pfad$)
      SetGadgetText(#TxtGadg2,pfad$)
    
    Case #combogadg2
      Select GetGadgetState(#combogadg2)
      Case 0 : flag = #PB_Date_Created
      Case 1 : flag = #PB_Date_Accessed
      Case 2 : flag = #PB_Date_Modified
      EndSelect
      
    Case #LosButt
      datum$=GetGadgetText(#Datgadg)
      AendereDatum(pfad$)
      
    EndSelect
  EndSelect
Until ende
End