Speichern einer Datei - Speicherdatum und Zeit manipulieren
Speichern einer Datei - Speicherdatum und Zeit manipulieren
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
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
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Das kannste nur anschließend per API machen:
http://msdn.microsoft.com/library/defau ... letime.asp
http://msdn.microsoft.com/library/defau ... letime.asp
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Frohes neues noch ...
.... 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?

Ist das einfach zu realisieren, oder fordere ich hier mal wieder mehrere Manntage Arbeit ein?

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Dann Du gucken CodeArchiv: http://www.purearea.net/pb/CodeArchiv/F ... me&Date.pb
oder die Includes von jaPBe, FilePlus.pbi
oder die Includes von jaPBe, FilePlus.pbi
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

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 festplatteDann Du gucken CodeArchiv: http://www.purearea.net/pb/CodeArchiv/F ... me&Date.pb

Ein Beispiel für die Abänderung des Änderungsdatums einer Datei (wenn sie noch nicht besteht, wird sie leer angelegt):
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 
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

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

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 ...
... funktioniert perfekt, wie ich es für meine zwecke benötige ;o)