Das Ordnerdatum manuel aendern

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
BSP
Beiträge: 201
Registriert: 01.02.2009 14:04

Re: Das Dateidatum manuel aendern

Beitrag von BSP »

Überprüfe mal, ob Deine Datei schreibgeschützt ist.

Gruß: Bernd
PB 5.31 (x86) & (x64) Win10
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: Das Dateidatum manuel aendern

Beitrag von HemSA »

Hallo Bernd,
ja das mit den Files klappt jetzt "SetFileDate"

Gibt es auch so etwas wie "SetFolderDate"? Ich habe diesbezüglich nichts gefunden. Ich will ja das Erstellungsdatum von den Ordner aendern, nicht die von den Dateien.

Ich werde diesbezüglich noch die Überschrift aendern, war wohl falsch gewaehlt.

Michael
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
BSP
Beiträge: 201
Registriert: 01.02.2009 14:04

Re: Das Ordnerdatum manuel aendern

Beitrag von BSP »

Hallo HemSA.

Ja, das Du eher die Ordnerzeiten einstellen möchtest, habe ich mir schon gedacht.
Leider ist das wohl nicht direkt machbar.
Das wundert mich auch, aber Ordner sind wohl irgentwie eine Besonderheit.

Auf einer VB Seite habe ich einen Trick entdeckt.
http://www.vbarchiv.net/tipps/details.php?id=593
Aber leider bin ich (noch) nicht schlau genug, das nach PB zu übersetzen.
Vieleicht kann da jemannd von den anderen Spezis hier helfen? :)

Gruß: Bernd
PB 5.31 (x86) & (x64) Win10
BSP
Beiträge: 201
Registriert: 01.02.2009 14:04

Re: Das Ordnerdatum manuel aendern

Beitrag von BSP »

Yipie, Geschaft. :bounce:

Nun müssen die beiden Teile, das alte und das neue
noch zusammengefügt werden.
Aber erst morgen.

Gruß: Bernd

Code: Alles auswählen

EnableExplicit
 

Global tCreation , tLastAccess, tLastWrite
Global ReadFolderTime,WriteFolderTime
Define sFolder.s = "c:\temp"

Procedure.s GetTime()
  Protected s.SYSTEMTIME
  Protected t$
  With s
  t$=RSet(Str(\wDay)    ,2,"0") +"."
  t$+RSet(Str(\wMonth)  ,2,"0") +"."
  t$+RSet(Str(\wYear)   ,4,"0") +" "
  t$+RSet(Str(\wHour)   ,2,"0") +":"
  t$+RSet(Str(\wMinute) ,2,"0") +":"
  t$+RSet(Str(\wSecond) ,2,"0")
  EndWith
  ProcedureReturn t$
EndProcedure

; ------ Datumswerte ermitteln

Procedure ReadFolderTime(sFolder.s)
 
  ; Datum/Zeitwert eines Ordners ermitteln
  Protected fHandle.l
 
  Protected ftCreation.FILETIME
  Protected ftLastAccess.FILETIME
  Protected ftLastWrite.FILETIME
  Protected LocalFileTime.FILETIME
  Protected LocalSystemTime.SYSTEMTIME
 
  Protected ReadFolderTime = #False
 
  ; ggf. abschließenden Backslash hinzufügen
  If Right(sFolder, 1) <> "\" : sFolder = sFolder + "\" : EndIf
 
  ; Verzeichnishandle ermitteln
  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 auslesen
    If GetFileTime_(fHandle, ftCreation, ftLastAccess, ftLastWrite) <> 0 
 
      ; Erstellungsdatum
      FileTimeToLocalFileTime_( ftCreation, LocalFileTime)
      FileTimeToSystemTime_( LocalFileTime, LocalSystemTime)
      
      tCreation=ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss",GetTime())
 
      ; Letzter Zugriff
      FileTimeToLocalFileTime_( ftLastAccess, LocalFileTime)
      FileTimeToSystemTime_( LocalFileTime, LocalSystemTime)
      
      tLastAccess = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss",GetTime())
      
      ; Letzte Änderung
      FileTimeToLocalFileTime_( ftLastWrite, LocalFileTime)
      FileTimeToSystemTime_( LocalFileTime, LocalSystemTime)
      
      tLastWrite =ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss",GetTime())
 
      ReadFolderTime = #True
    EndIf
 
    ; Verzeichnishandle schließen
    CloseHandle_( fHandle)
  EndIf
  ProcedureReturn ReadFolderTime
EndProcedure

; ------ Datumswerte ändern

Procedure WriteFolderTime(sFolder.s)
 
  ; Datum/Zeitwert eines Ordners ändern
  Protected fHandle.l
  Protected ftCreation.FILETIME
  Protected ftLastAccess.FILETIME
  Protected ftLastWrite.FILETIME
  Protected LocalFileTime.FILETIME
  Protected LocalSystemTime.SYSTEMTIME
 
  Protected WriteFolderTime = #False
 
  ; ggf. abschließenden Backslash hinzufügen
  If Right(sFolder, 1) <> "\" : sFolder = sFolder + "\" : EndIf
 
  ; Verzeichnishandle ermitteln
  fHandle = CreateFile_(sFolder, #GENERIC_READ | #GENERIC_WRITE, #FILE_SHARE_READ | #FILE_SHARE_WRITE,  0, #OPEN_EXISTING, #FILE_FLAG_BACKUP_SEMANTICS, 0)
 
  If fHandle <> -1 
    ; Erstellungsdatum
    With LocalSystemTime
      \wDay = Day(tCreation)
      ;\wDayOfWeek = DayOfWeek(tCreation)
      \wMonth = Month(tCreation)
      \wYear = Year(tCreation)
      \wHour = Hour(tCreation)
      \wMinute = Minute(tCreation)
      \wSecond = Second(tCreation)
    EndWith
    SystemTimeToFileTime_(LocalSystemTime, LocalFileTime)
    LocalFileTimeToFileTime_(LocalFileTime, ftCreation)
 
    ; Letzter Zugriff
    With LocalSystemTime
      \wDay = Day(tLastAccess)
      ;\wDayOfWeek = Weekday(tLastAccess)
      \wMonth = Month(tLastAccess)
      \wYear = Year(tLastAccess)
      \wHour = Hour(tLastAccess)
      \wMinute = Minute(tLastAccess)
      \wSecond = Second(tLastAccess)
    EndWith
    SystemTimeToFileTime_(LocalSystemTime, LocalFileTime)
    LocalFileTimeToFileTime_(LocalFileTime, ftLastAccess)
 
    ; Letzte Änderung
    With LocalSystemTime
      \wDay = Day(tLastWrite)
      ;\wDayOfWeek = Weekday(tLastWrite)
      \wMonth = Month(tLastWrite)
      \wYear = Year(tLastWrite)
      \wHour = Hour(tLastWrite)
      \wMinute = Minute(tLastWrite)
      \wSecond = Second(tLastWrite)
    EndWith
    SystemTimeToFileTime_(LocalSystemTime, LocalFileTime)
    LocalFileTimeToFileTime_(LocalFileTime, ftLastWrite)
 
    ; Datumswerte neu setzen
    If SetFileTime_(fHandle, ftCreation, ftLastAccess, ftLastWrite) <> 0 
 
      WriteFolderTime = #True
    EndIf
 
    ; Verzeichnishandle schließen
    CloseHandle_ (fHandle)
  EndIf
  ProcedureReturn WriteFolderTime
EndProcedure

; ------ Aufruf der Funktionen:
 
; Zeitangaben lesen
If ReadFolderTime(sFolder)
  ; Erstellungsdatum ändern
  tCreation = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss","29.08.2002 17:35:41")
 
  ; Datum "Letzter Zugriff" ändern
  tLastAccess = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss","29.08.2002 17:35:41")
 
  ; Datum "Letzter Änderung" ändern
  tLastWrite = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss","30.03.2012 17:35:41")
 
  ; Zeitangaben setzen
  WriteFolderTime(sFolder)
EndIf
PS. Ich finde, nun darf das Ganze aber nach Tips & Tricks erhoben werden. :D
PB 5.31 (x86) & (x64) Win10
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Das Ordnerdatum manuel aendern

Beitrag von RSBasic »

@BSP
Erstell einfach dort einen neuen Thread und füg dort deinen Code ein.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Das Ordnerdatum manuel aendern

Beitrag von Shardik »

Im englischen Forum hat netmaestro schon 2007 in einem Beispiel
gezeigt, wie man das Erstellungsdatum eines Ordners abändert:
http://www.purebasic.fr/english/viewtopic.php?t=28023
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: Das Ordnerdatum manuel aendern

Beitrag von HemSA »

Hallo Bernd,
danke dir.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
BSP
Beiträge: 201
Registriert: 01.02.2009 14:04

Re: Das Ordnerdatum manuel aendern

Beitrag von BSP »

Hallo HemSA.
Gern geschehen. Mir macht das Tüfteln ja auch Spass.
Meine überarbeitete Version hier:
http://www.purebasic.fr/german/viewtopi ... =8&t=25382
hast Du auch gefunden?

Gruß: Bernd
Zuletzt geändert von BSP am 02.04.2012 14:18, insgesamt 1-mal geändert.
PB 5.31 (x86) & (x64) Win10
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Das Ordnerdatum manuel aendern

Beitrag von RSBasic »

@BSP
Kannst du bitte nicht mehr über diese URL "http://forums.purebasic.com/german/" (veraltet) ins Forum kommen, sondern über die folgende: "http://www.purebasic.fr/german/"
Deine Links funktionieren nämlich nicht richtig (man ist dann nicht mehr angemeldet), wenn ein Anderer unter der aktuellen URL ("http://www.purebasic.fr/german/") angemeldet ist.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
BSP
Beiträge: 201
Registriert: 01.02.2009 14:04

Re: Das Ordnerdatum manuel aendern

Beitrag von BSP »

Hallo RSBasic.
Habs geändert. Danke für den Hinweis.

Gruß: Bernd
PB 5.31 (x86) & (x64) Win10
Antworten