Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateidatum setzen (https://www.delphipraxis.net/139350-dateidatum-setzen.html)

API 27. Aug 2009 05:56


Dateidatum setzen
 
Hi,

Eine Textdatei soll geändert werden, ohne dass das Dateidatum geändert wird (primär LastWriteTime)
Die Datei wird geladen, das Dateidatum ausgelesen, die Datei wird geändert (durch den User) und danach wieder gespeichert und
das alte Dateidatum gesetzt.

Leider wird das alte Dateidatum nicht wieder gesetzt. Woran könntest das liegen?

Delphi-Quellcode:
private  
  FCurFile: string;
  FModifiedDateTime : TDateTime;
  FCreationTime : FileTime;
  FLastAccessTime : FileTime;
  FLastWriteTime : FileTime;
Delphi-Quellcode:
procedure GetFileDateTime(const TheFile: string; var fCreationTime, fLastAccessTime, fLastWriteTime: FileTime);
var
  fh : THandle;
begin
  fh := FileOpen(TheFile, fmOpenRead);
  GetFileTime(fh, @fCreationTime, @fLastAccessTime, @fLastWriteTime);
  CloseHandle(fh);
end;

procedure SetFileDateTime(const TheFile: string; fCreationTime, fLastAccessTime, fLastWriteTime: FileTime);
var
  fh : THandle;
  fn : string;
begin
  fh := FileOpen(TheFile, fmOpenRead);
  SetFileTime(fh, @fCreationTime, @fLastAccessTime, @fLastWriteTime);
  CloseHandle(fh);
end;

// Datei Laden und FileDateTime auslesen
procedure TForm1.FileListBox1Click(Sender: TObject);
begin
  FCurFile := FileListBox1.Items[FileListBox1.ItemIndex];
  Memo1.Lines.LoadFromFile(FCurFile);
  GetFileDateTime(FCurFile, fCreationTime, fLastAccessTime, fLastWriteTime);
end;

// Datei speichern und altes FileDateTime setzen
procedure TForm1.btnSaveClick(Sender: TObject);
begin
  if FCurFile <> '' then
  begin
    Memo.Lines.SaveToFile(FCurFile);
    SetFileDateTime(FCurFile, fCreationTime, fLastAccessTime, fLastWriteTime);
  end;
end;

himitsu 27. Aug 2009 06:53

Re: Dateidatum setzen
 
Zitat:

Zitat von API
primär LastWriteTime

SetFileTime(fh, nil, nil, @fLastWriteTime);

was sagt FileOpen, also welchen Wert hat fh und was sagt GetLastError nach FileOpen und SetFileTime?

Sprint 27. Aug 2009 07:03

Re: Dateidatum setzen
 
In deiner Funktion SetFileDateTime musst du fmOpenRead durch fmOpenReadWrite oder fmOpenWrite ändern.

himitsu 27. Aug 2009 07:20

Re: Dateidatum setzen
 
Zitat:

Zitat von Sprint
In deiner Funktion SetFileDateTime musst du fmOpenRead durch fmOpenReadWrite oder fmOpenWrite ändern.

OK, bei diesem komischen OpenFile kann man dieses zwar nicht getrennt eingeben,
aber eigentlich braucht er ja nur FILE_WRITE_ATTRIBUTES, welches hoffentlich in fmOpen...Write enthalten ist.

Aber die falschen/fehlenden "Rechte" hätte ihm GetLastError auch mitgeteilt :zwinker:

Sprint 27. Aug 2009 08:18

Re: Dateidatum setzen
 
Zitat:

Zitat von himitsu
Aber die falschen/fehlenden "Rechte" hätte ihm GetLastError auch mitgeteilt :zwinker:

Im gesamten Quelltext ist keine Fehlerbehandlung. Da kann ja noch mehr schief gehen.

himitsu 27. Aug 2009 08:54

Re: Dateidatum setzen
 
Was denkst du denn, warum ich ihn über die Fehlerbehandlung versuchte an den Fehler heranzuführen?
(vielleicht prägt sich das dann ein und er nutzt es dann öfters mal :roll: )

API 29. Nov 2009 07:18

Re: Dateidatum setzen
 
Zitat:

Zitat von Sprint
Zitat:

Zitat von himitsu
Aber die falschen/fehlenden "Rechte" hätte ihm GetLastError auch mitgeteilt :zwinker:

Im gesamten Quelltext ist keine Fehlerbehandlung. Da kann ja noch mehr schief gehen.

Das war ja nur der nackte Quellcode, ohne die try..except etc. Umhüllung


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz