Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi wie: Uhrzeit von Verzeichnissen ändern ? (https://www.delphipraxis.net/83910-wie-uhrzeit-von-verzeichnissen-aendern.html)

Coder 8. Jan 2007 12:06


wie: Uhrzeit von Verzeichnissen ändern ?
 
gibts auch was, um die Uhrzeit zu ändern?

hatte mal diesen Code gefunden, aber das funktioniert irgendwie nicht

Delphi-Quellcode:
function SetFileTimes(FileName: string;
  const Created: TDateTime;
  const Modified: TDateTime;
  const Accessed: TDateTime): Boolean;
var
  FileHandle: Integer;
  FTime, FTimeC, FTimeA, FTimeM: TFileTime;
  STime: TSystemTime;
  TimeFlag: Integer;
begin
  TimeFlag := 0;

  Result := False;

  ZeroMemory(@FTime, SizeOf(FTime));
  ZeroMemory(@FTime, SizeOf(FTimeC));
  ZeroMemory(@FTime, SizeOf(FTimeM));
  ZeroMemory(@FTime, SizeOf(FTimeA));

  // Created
  if Created > 0 then
  begin
    DateTimeToSystemTime(Created, STime);
    SystemTimeToFileTime(STime, FTime);
    LocalFileTimeToFileTime(FTime, FTimeC);
    Inc(TimeFlag, 1);
  end;

  // Accessed
  if Accessed > 0 then
  begin
    DateTimeToSystemTime(Accessed, STime);
    SystemTimeToFileTime(STime, FTime);
    LocalFileTimeToFileTime(FTime, FTimeA);
    Inc(TimeFlag, 2);
  end;

  // Modified
  if Modified > 0 then
  begin
    DateTimeToSystemTime(Modified, STime);
    SystemTimeToFileTime(STime, FTime);
    LocalFileTimeToFileTime(FTime, FTimeM);
    Inc(TimeFlag, 4);
  end;

  if TimeFlag = 0 then
  begin
    Exit; // Nothing to do
  end;

  // Get a File Handle
  FileHandle := FileOpen(FileName, fmOpenReadWrite + fmShareExclusive);
  if FileHandle < 0 then
  begin
    Exit;
  end;

/////////////////////////////
///    Aufruf
////////////////////////
procedure TForm1.Button3Click(Sender: TObject);
var wfn: string;
  d: Tsearchrec;
  FT: TFiletime;
  ST: TSYSTEMTIME;
  DT: TDateTime;
  I, H: Integer;
begin
  if Edit1.Text = '' then Exit: // kein Pfad angegeben
    DT := Now;   //   35065 = 1.1.1996 0 Uhr;
  DecodeTime(DT, ST.wHour, ST.wMinute, ST.wSecond, St.wMilliseconds);
  DecodeDate(DT, ST.wYear, ST.wMonth, ST.wDay);
  SystemTimeToFileTime(ST, ft);

  h := FileOpen(Edit1.Text, fmopenwrite);
  SetFileTime(h, @ft, @ft, @ft);
  FileClose(h);
end;

Christian Seehase 8. Jan 2007 12:32

Re: wie: Uhrzeit von Verzeichnissen ändern ?
 
Moin Jens,

das hier

Delphi-Quellcode:
fmOpenReadWrite + fmShareExclusive
ist gefährlich. Da es sich um ein Bitfeld handelt, sollte man die Werte mit OR verknüpfen, da man ansonsten ungültige Werte erhalten kann.

Auch wenn es so in der Delphi-Hilfe dokumentiert ist, würde ich den Rückgabewert von FileOpen nicht auf < 0, sondern auf = -1, besser noch, auf = INVALID_HANDLE_VALUE vergleichen, (INVALID_HANDLE_VALUE ist -1), da dieser Wert für CreateFile als "Aufruf fehlgeschlagen" definiert ist. (CreateFile wird intern von FileOpen benutzt).

Der Aufruf wird bei Dir deshalb fehlschlagen, da man mit FileOpen keine Verzeichnisse öffnen kann.
Hierzu solltest Du Dir mal MSDN-Library durchsuchenCreateFile anschauen, speziell auch FILE_FLAG_BACKUP_SEMANTICS, denn dieser Wert wird benötigt, um ein gültiges Handle auf ein Verzeichnis zu erhalten.

shmia 8. Jan 2007 12:52

Re: wie: Uhrzeit von Verzeichnissen ändern ?
 
In der JCL (Jedi Code Library) gibt es in der Unit JclFileUtils die Funktionen
Delphi-Quellcode:
function SetDirLastWrite(const DirName: string; const DateTime: TDateTime): Boolean;
function SetDirLastAccess(const DirName: string; const DateTime: TDateTime): Boolean;
function SetDirCreation(const DirName: string; const DateTime: TDateTime): Boolean;
Du kannst nun versuchen, die Funktionen herauszuextrahieren oder die JCL ingesamt verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 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