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