Seite 2 von 2

Re: Das Dateidatum manuel aendern

Verfasst: 28.03.2012 22:58
von BSP
Überprüfe mal, ob Deine Datei schreibgeschützt ist.

Gruß: Bernd

Re: Das Dateidatum manuel aendern

Verfasst: 29.03.2012 20:14
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

Re: Das Ordnerdatum manuel aendern

Verfasst: 29.03.2012 20:54
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

Re: Das Ordnerdatum manuel aendern

Verfasst: 30.03.2012 02:05
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

Re: Das Ordnerdatum manuel aendern

Verfasst: 30.03.2012 07:27
von RSBasic
@BSP
Erstell einfach dort einen neuen Thread und füg dort deinen Code ein.

Re: Das Ordnerdatum manuel aendern

Verfasst: 30.03.2012 08:31
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

Re: Das Ordnerdatum manuel aendern

Verfasst: 01.04.2012 20:00
von HemSA
Hallo Bernd,
danke dir.

Re: Das Ordnerdatum manuel aendern

Verfasst: 01.04.2012 23:23
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

Re: Das Ordnerdatum manuel aendern

Verfasst: 02.04.2012 07:36
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.

Re: Das Ordnerdatum manuel aendern

Verfasst: 02.04.2012 14:19
von BSP
Hallo RSBasic.
Habs geändert. Danke für den Hinweis.

Gruß: Bernd