Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel... (https://www.delphipraxis.net/173326-datei-aenderungsuhrzeit-einer-schleife-aendern-1-stunde-zuviel.html)

musicman56 19. Feb 2013 08:32

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;

juergen 20. Feb 2013 20:22

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.

musicman56 20. Feb 2013 21:59

AW: Datei-Änderungsuhrzeit in einer Schleife ändern, 1 Stunde zuviel...
 
Hallo Jürgen,

probier's mal so:

Delphi-Quellcode:
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;
  . . . .
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)

juergen 20. Feb 2013 22:27

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!

juergen 20. Feb 2013 22:55

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 06:14 Uhr.
Seite 2 von 2     12   

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