![]() |
Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Hallo zusammen,
ich suche schon eine ganze Weile, finde aber das eigentlich Problem nicht und weiß wohl deswegen auch nicht so recht wonach ich suchen muss. In einer Schleife ändere ich die Uhrzeit. Dabei wird die Beginn-Uhrzeit als Offset gesetzt und dann die Anzahl der Sekunden, um welche sich die UHrzeit bei jeder neuen Datei erhöhen soll. Im Debugger werden mir die richtigen Werte der Funktionen angezeigt! Im Betriebssystem wird die letzte Datei aus der Schleife mit der richtigen Uhrzeit angezeigt, alle anderen Dateien sind um genau 1 Stunde zu hoch.... Hier mein relevanter Code:
Delphi-Quellcode:
Mit den ganzen Datumsfunktionen stehe ich eh etwas auf Kriegsfuß, allzumal wenn man wenig damit arbeitet.
function GetFileDate(TheFileName: string): TDateTime;
var FHandle: integer; begin FHandle := FileOpen(TheFileName, 0); try Result := (FileDateToDateTime(FileGetDate(FHandle))); finally FileClose(FHandle); end; end; procedure TMain_Form.Set_myNewFileTime(FileName: string); var OldFDate, FileDate: TDateTime; OldFTime, NewFTime, Start_Time: Double; begin if (Chckb_Uhrzeit_hochzaehlen.Checked) and ((Time_pick_Datei_Offsettime.Text <> '00:00:00') or (SpEdt_Sekundenzaehler.Value <> 0)) then begin OldFDate := GetFileDate(FileName); Start_Time := (Time_pick_Datei_Offsettime.Value); NewFTime := Start_Time + (SpinEdit_Sekundenzaehler.Value / 86400); FileDate := Trunc(OldFDate) + NewFTime; ChangeFileTimeStamp(FileName, FileDate); end; end; procedure.... var li_Sekundenzaehler : Integer; beginn li_Sekundenzaehler := SpEdt_Sekundenzaehler.Value; //Beginn Schleife... Set_myNewFileTime(FileName); // SpEdt_Sekundenzaehler.Value := SpEdt_Sekundenzaehler.Value + li_Sekundenzaehler; ... //Ende Schleife SpEdt_Sekundenzaehler.Value := li_Sekundenzaehler; end; Kann mir hier jemand den richtigen Schubser geben? Vielen Dank! |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Auch wenn ich nicht wirklich Ahnung habe: Kann es sein, dass die Zeitstempel im Programm bzw. den Funktionen in UTC sind? Das würde genau zu der Stunde Differenz passen.
MfG Dalai |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
@Dalai,
das denke ich auch dass es irgendwo an der UTC-Zeit liegt. Doch warum hat die letzte Datei aus der Schleife dann den richtigen Uhrzeitwert? Wahrscheinlich hängt es beim FileGetDate. In der Hilfe steht dass die Betriebssytemuhrzeit ausgelesen wird. Ob das die UTC-Zeit ist? Momentan weiß ich nicht wie ich das Problem lösen könnte.:oops: |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Zitat:
MfG Dalai |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Wieviele Dateien sind das?
Bringt eine andere Anzahl Dateien ein anderes Ergebnis? Liegt es evtl. an der Datei selbst? Was passiert, wenn eine andere als letztens dran ist? Time_pick_Datei_Offsettime ist ein TDateTimePicker? Hast du mal Time_pick_Datei_Offsettime.Time oder Trunc(Time_pick_Datei_Offsettime.Value) anstatt Time_pick_Datei_Offsettime.Value getestet? |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Hallo Angel4585,
danke für deine Unterstützung!:thumb: Bei Verwendung mit Trunc(Time_pick_Datei_Offsettime.Value) oder Trunc(Time_pick_Datei_Offsettime.Time) kommen ganz falsche Uhrzeiten raus, allerdings wieder mit dem selben Verhalten: Bis auf die letzte Datei haben alle anderen Dateien eine Stunde zuviel. Das Verhalten habe ich bei anderen Dateien auch bzw. auch bei unterschiedlicher Anzahl von Dateien, die letzte Datei aus der Schleife hat die richtige Uhrzeit, alle anderen haben eine Stunde zuviel... hmm, Ratlose Grüße |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Nach einem intensiveren Blick auf deinen Code fiel mir dies noch auf:
Delphi-Quellcode:
Gibt es zwei davon oder ist das nur ein Versehen/Vertipper?
[...] SpEdt_Sekundenzaehler.Value [...]
NewFTime := Start_Time + (SpinEdit_Sekundenzaehler.Value / 86400); MfG Dalai |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Hallo Dalai ,
:oops: ist ein versehen, nur hier... |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Ja natürlich nicht Trunc(), bin ich doof xD Trunc() gibt den ganzzahligen Anteil zurück.
Na wie war das mit dem NACHkomma-anteil? Komm grad nicht drauf, bin schon müde... mich würde die gesamte procedure mit BeginSchleife und EndSchleife interessieren, liegt da vielleicht das Problem? |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
du meintest wahrscheinlich Frac(). Leider hilft das auch nicht weiter, weder mit SpEdt_Sekundenzaehler.Time noch mit SpEdt_Sekundenzaehler.Value noch mit Frac(NewFTime)
|
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Hallo,
was macht eigentlich "ChangeFileTimeStamp(FileName, FileDate)" ? Probier's mal damit:
Delphi-Quellcode:
function RF_SetAllFileDates(FName: string;
aCreation, aLastAccess, aLastWrite : TDateTime): boolean; var aHandle: integer; FT1, FT2, FT3: TFileTime; locFT1, locFT2, locFT3: TFileTime; ST1, ST2, ST3 : TSystemTime; begin aHandle := FileOpen(FName, fmOpenWrite or fmShareDenyWrite); Result := aHandle >= 0; if Result then try DateTimeToSystemTime(aCreation,ST1); DateTimeToSystemTime(aLastAccess,ST2); DateTimeToSystemTime(aLastWrite,ST3); SystemTimeToFileTime(ST1,FT1); SystemTimeToFileTime(ST2,FT2); SystemTimeToFileTime(ST3,FT3); LocalFileTimeToFileTime(FT1,locFT1); LocalFileTimeToFileTime(FT2,locFT2); LocalFileTimeToFileTime(FT3,locFT3); SetFileTime(aHandle,@locFT1, @locFT2, @locFT3); finally FileClose(aHandle); end; end; |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo musicman56,
danke für deine Hilfestellung!:) Ich habe das bei mir so umgestellt, aber in meinem eigentlichem Projekt verhält es sich immer noch so, dass die letzte Datei aus der Schleife die richtige Uhrzeit hat, alle anderen haben eine Stunde zuviel... Weiterhin werden die Uhrzeiten mal gesetzt und dann wieder nicht. Irgendwas stimmt da noch nicht. Ich habe jetzt ein Testprojekt zusammengeklöppelt. Hier werden die Uhrzeit erst gar nicht gesetzt... Momentan sehe ich das Problem gar nicht. 2 Fragen zum Test-Projekt: 1. Warum werden die Uhrzeiten der Testdateien im Unterordner "Testdateien_zum_umbenennen" nicht gesetzt und 2. wenn die Uhrzeiten gesetzt werden können, sind diese Uhrzeiten dann auch korrekt? Vielen Dank vorab für Hilfestellung. Das Test-Projekt ist hier im Anhang. |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Hallo Jürgen,
probier's mal so:
Delphi-Quellcode:
Eines der Probleme mit deinem Code könnte sein: Wenn die Uhrzeit z.B. 23:59 ist, und eine Stunde dazu kommt, dann muss auch der Tag erhöht werden. In diesem Fall wird das TimeOffset > 1 und somit funktionierts (ungetestet)
procedure TFrm_Main.Set_my_global_Time_Variablen(FileName: string);
var OldFileDateTime, NewFileDateTime: TDateTime; TimeOffset: Double; begin OldFileDateTime := GetFileDate(FileName); TimeOffset := Frac(TP_Datei_Offsettime.Time) + (SpEdt_Sekundenzaehler.Value / 86400); NewFileDateTime := OldFileDateTime + TimeOffset; . . . . |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Hallo musicman,
danke für deine Antwort. Leider hilft das auch nicht. Die Uhrzeiten werden einfach nicht gesetzt! Ich lass mir in dieser Procedure eine Message anzeigen, da ist alles richtig. Mit deinem Code wird die vorhandene Zeit hochgezählt um den Wert aus dem Timepicker. Dass die Uhrzeiten gar nicht gesetzt werden liegt vermutlich an der Funktion Set_my_New_Time. Allerdings erkenne ich nicht warum es die Funktion nicht tut.:( EDIT!!! Ich hatte angenommen, dass LastAccessTime das Änderungsdatum sei!!! Davon war ich so überzeugt, dass ich gar nicht in Betracht zog da näheres zu lesen. Das Änderungsdatum ist aber LastWriteTime! Habe erst jetzt die Hilfe von SetFileTime mal *richtig* gelesen... Sorry, da war ich zu oberflächlich. Thema hat sich somit erledigt. Nun wird auch alles richtig erstellt. Gute Nacht! |
AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
Hiermit setze ich das Thema auf beantwortet.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz