Seite 1 von 1
Speichern einer Datei - Speicherdatum und Zeit manipulieren
Verfasst: 03.01.2006 13:42
von hiltwin
Hallo,
ich möchte gerne eine Datei so speichern, dass später mit dem Explorer dort jedesmal als Datum z.B. 20.05.2005 20:05 Uhr angezeigt wird, egal an welchem Datum die Speicherung tatsächlich erfolgte.
Ist das mit PB möglich?
Frdl. Gruss
Hiltwin
Verfasst: 03.01.2006 16:04
von ts-soft
Frohes neues noch ...
Verfasst: 03.01.2006 16:36
von hiltwin
.... aber Du weisst doch, dass ich von API in PB keine Ahnung hab
Ist das einfach zu realisieren, oder fordere ich hier mal wieder mehrere Manntage Arbeit ein?

Verfasst: 03.01.2006 16:41
von ts-soft
Dann Du gucken CodeArchiv:
http://www.purearea.net/pb/CodeArchiv/F ... me&Date.pb
oder die Includes von jaPBe, FilePlus.pbi
Verfasst: 03.01.2006 20:50
von hiltwin
hm, da hab ich reingeschaut. das ist allerdings ja nur die abfrage, wann die letzte änderung gewesen ist. beim ändern von get in set hat sich nicht wirklich was bei mir getan auf der festplatte

Verfasst: 05.01.2006 18:48
von Shardik
Ein Beispiel für die Abänderung des Änderungsdatums einer Datei (wenn sie noch nicht besteht, wird sie leer angelegt):
Code: Alles auswählen
#Filename = "C:\Test.Dat"
#Day = 5
#Month = 1
#Year = 2005
#Hour = 9
#Minute = 45
Procedure SetFileToCustomTime(FileHandle.L)
FileTime.FILETIME
SystemTime.SYSTEMTIME
SystemTime\wDay = #Day
SystemTime\wMonth = #Month
SystemTime\wYear = #Year
If #Hour = 0 Or #Hour = 24
SystemTime\wHour = 23
Else
SystemTime\wHour = #Hour - 1
EndIf
SystemTime\wMinute = #Minute
; ----- Zeit im Systemformat in das Dateiformat konvertieren
If SystemTimeToFileTime_(@SystemTime, @FileTime) = #False
ProcedureReturn #False
EndIf
; ----- Änderungs-Datum und -Zeit der Datei abändern
If SetFileTime_(FileHandle, 0, 0, @FileTime) = #False
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
FileHandle.L
FileHandle = OpenFile(1, #Filename)
If FileHandle = #False
MessageRequester("Fehler", "Die Datei '" + #Filename + "' konnte nicht mit Schreibzugriff geöffnet werdent!", #MB_ICONERROR)
Else
If SetFileToCustomTime(FileHandle) = #False
MessageRequester("Fehler", "Die Abänderung des Änderungsdatums der Datei '" + #Filename + "' ist gescheitert!", #MB_ICONERROR)
Else
MessageRequester("Info", "Die Abänderung des Änderungsdatums der Datei '" + #Filename + "' war erfolgreich!", #MB_ICONINFORMATION)
EndIf
CloseFile(1)
EndIf
Vielleicht kann mir aber auch bei dieser Gelegenheit jemand einen Tipp geben, wie man die lokale Zeit berücksichtigt. Wenn ich mit der API-Funktion SystemTimeToTzSpecificLocalTime_() die gewünschte Zeit auf Grund der aktuell einstellten Zeitzone in die lokale Zeit umwandele, dann werden 2 Stunden zu der gewünschten Zeit hinzuaddiert. Lasse ich es weg, wird 1 Stunde hinzuaddiert. Deshalb die unschöne Anpassung im Code durch Abziehen einer Stunde

Verfasst: 05.01.2006 18:55
von ts-soft
Diese beiden Proceduren von GPI könnten vielleicht hilfreich sein:
Procedure FileTimeToDate(*FT.FILETIME) ; - Convert API-Time-Format to PB-Date() [FilePlus.pbi]
FileTimeToLocalFileTime_ (*FT.FILETIME,FT2.FILETIME)
FileTimeToSystemTime_ (FT2,st.SYSTEMTIME)
ProcedureReturn Date (st\wYear,st\wMonth,st\wDay,st\wHour,st\wMinute,st\wSecond)
EndProcedure
Procedure DateToFileTime( Date ,*FT.FILETIME) ; - Convert PB-Date() to API-Time-Format [FilePlus.pbi]
st.SYSTEMTIME
st\wYear= Year ( Date )
st\wMonth= Month ( Date )
st\wDayOfWeek= DayOfWeek ( Date )
st\wDay= Day ( Date )
st\wHour= Hour ( Date )
st\wMinute= Minute ( Date )
st\wSecond= Second ( Date )
SystemTimeToFileTime_ (st,FT2.FILETIME)
LocalFileTimeToFileTime_ (FT2,*FT)
EndProcedure
Verfasst: 10.01.2006 14:20
von Shardik
Ein verbessertes Code-Beispiel, das in jeder Zeitzone korrekt arbeiten sollte:
Code: Alles auswählen
#Filename = "C:\Test.Dat"
#Day = 5
#Month = 1
#Year = 2005
#Hour = 9
#Minute = 45
Procedure.B SetFileToCustomTime(FileHandle.L, Day.W, Month.W, Year.W, Hour.W, Minute.W)
CustomTime.SYSTEMTIME
LocalFileTime.FILETIME
UTCFileTime.FILETIME
; ----- Gewünschte Zeit in SYSTEMTIME-Struktur eintragen
CustomTime\wDay = Day
CustomTime\wMonth = Month
CustomTime\wYear = Year
CustomTime\wHour = Hour
CustomTime\wMinute = Minute
; ----- Zeit im Systemzeit-Format in das lokale Dateizeit-Format konvertieren
If SystemTimeToFileTime_(@CustomTime, @LocalFileTime) = #False
ProcedureReturn #False
EndIf
; ----- Zeit im lokalen Dateizeit-Format in das UTC-Dateizeit-Format konvertieren
If LocalFileTimeToFileTime_(@LocalFileTime, @UTCFileTime) = #False
ProcedureReturn #False
EndIf
; ----- Änderungs-Datum und -Zeit der Datei abändern
If SetFileTime_(FileHandle, 0, 0, @UTCFileTime) = #False
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
FileHandle.L = OpenFile(1, #Filename)
If FileHandle = #False
MessageRequester("Fehler", "Die Datei '" + #Filename + "' konnte nicht mit Schreibzugriff geöffnet werdent!", #MB_ICONERROR)
Else
If SetFileToCustomTime(FileHandle, #Day, #Month, #Year, #Hour, #Minute) = #False
MessageRequester("Fehler", "Die Abänderung des Änderungsdatums der Datei '" + #Filename + "' ist gescheitert!", #MB_ICONERROR)
Else
MessageRequester("Info", "Die Abänderung des Änderungsdatums der Datei '" + #Filename + "' war erfolgreich!", #MB_ICONINFORMATION)
EndIf
CloseFile(1)
EndIf
dank euch beiden ...
Verfasst: 12.01.2006 19:42
von hiltwin
... funktioniert perfekt, wie ich es für meine zwecke benötige ;o)