Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "FileSetDate" auch für Ordner? (https://www.delphipraxis.net/69843-filesetdate-auch-fuer-ordner.html)

Helmi 20. Mai 2006 21:44


"FileSetDate" auch für Ordner?
 
Hallo,

gibt es die function "FileSetDate" auch für Ordner?

ich möchte gerne das Datum eines Ordners setzen

himitsu 20. Mai 2006 22:22

Re: "FileSetDate" auch für Ordner?
 
Delphi-Quellcode:
Function SetFileAge(Const FileName: AnsiString; Age: TFileTime): Boolean;
  Var F: THandle;

  Begin
    Result := False;
    F := CreateFileA(PAnsiChar(FileName), GENERIC_WRITE,
      FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0);
    If F = INVALID_HANDLE_VALUE Then Exit;
    {CreateTime}     Result := SetFileTime(F, @Age, nil, nil);
    {LastAccessTime} Result := SetFileTime(F, nil, @Age, nil);
    {LastWriteTime}  Result := SetFileTime(F, nil, nil, @Age);
    CloseHandle(F);
  End;
Ich hoff ich hab's richtig übersetzt ... der Funktion kannst du Dateien, oder Verzeíchnisse (ohne ein abschliesendes "\") übergeben.

Du mußt dir nur noch raussuchen welche Zeit du ändern willst ... einfach 2 von den 3 Zeilen in der Mitte (die mit {...} am Anfang) rauslöschen :)

[add]
oder einfach so
Delphi-Quellcode:
Function SetFileAge(Const FileName: AnsiString; Age: Integer): Boolean;
  Var F: THandle;

  Begin
    Result := False;
    F := CreateFileA(PAnsiChar(FileName), GENERIC_WRITE,
      FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0);
    If F = INVALID_HANDLE_VALUE Then Exit;
    Result := FileSetDate(F, Age) = 0;
    CloseHandle(F);
  End;

Tiemo 2. Jun 2006 19:24

Re: "FileSetDate" auch für Ordner?
 
Zitat:

Zitat von himitsu
Delphi-Quellcode:
Function SetFileAge(Const FileName: AnsiString; Age: TFileTime): Boolean;
  Var F: THandle;

  Begin
    Result := False;
    F := CreateFileA(PAnsiChar(FileName), GENERIC_WRITE,
      FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0);
    If F = INVALID_HANDLE_VALUE Then Exit;
    {CreateTime}     Result := SetFileTime(F, @Age, nil, nil);
    {LastAccessTime} Result := SetFileTime(F, nil, @Age, nil);
    {LastWriteTime}  Result := SetFileTime(F, nil, nil, @Age);
    CloseHandle(F);
  End;

Funzt nicht bei Ordnern (bei mir). Es muss heißen:

Delphi-Quellcode:
Function SetFileAge(Const FileName: AnsiString; Age: TFileTime): Boolean;
  Var F: THandle;

  Begin
    Result := False;
    F := CreateFileA(PAnsiChar(FileName), GENERIC_WRITE,
      FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
    If F = INVALID_HANDLE_VALUE Then Exit;
    {CreateTime}     Result := SetFileTime(F, @Age, nil, nil);
    {LastAccessTime} Result := SetFileTime(F, nil, @Age, nil);
    {LastWriteTime}  Result := SetFileTime(F, nil, nil, @Age);
    CloseHandle(F);
  End;

himitsu 3. Jun 2006 09:09

Re: "FileSetDate" auch für Ordner?
 
Da stellt sich mir nur eine Frage ... bei mir ging es (bei meinen Tests damals) ... was hat FILE_FLAG_BACKUP_SEMANTICS mit Verzeichnissen zu tun :shock:

Tiemo 5. Jun 2006 14:53

Re: "FileSetDate" auch für Ordner?
 
Zitat:

Zitat von himitsu
Da stellt sich mir nur eine Frage ... bei mir ging es (bei meinen Tests damals) ... was hat FILE_FLAG_BACKUP_SEMANTICS mit Verzeichnissen zu tun :shock:

Bei mir ging der o.g. Code nur für Files. Ich fand dann folgendes:

http://thehacker.host.sk/addtime/addtimethread.html

Windows NT: You can obtain a handle to a directory by calling the CreateFile function with the FILE_FLAG_BACKUP_SEMANTICS flag set, as follows:

hDir = CreateFile (
DirName,
GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL
);

You can pass a directory handle to the following functions:
BackupRead
BackupSeek
BackupWrite
GetFileInformationByHandle
GetFileSize
GetFileTime
GetFileType
ReadDirectoryChangesW
SetFileTime


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