AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiattribute und -zeitstempel kopieren

Ein Thema von necromundo · begonnen am 15. Apr 2009 · letzter Beitrag vom 16. Apr 2009
 
necromundo

Registriert seit: 31. Jan 2005
26 Beiträge
 
#19

Re: Dateiattribute und -zeitstempel kopieren

  Alt 16. Apr 2009, 12:55
So, das Problem ist behoben!
Die Vermutung, dass das letzte Zugriffsdatum sofort geändert wird, wenn die Datei in irgendeiner Weise angepackt wird, hat sich bewahrheitet. Also gestaltet sich der Kopiervorgang einer Datei etwas schwieriger als vermutet, wenn man wirklich alle Zeitstempel beibehalten und auch auf die kopierte Datei übertragen will:

Ich habe eine Datenstruktur angelegt für die Zeitstempel:
Delphi-Quellcode:
TZeitstempel = record
    creation: TFileTime;
    lastchange: TFileTime;
    lastaccess: TFileTime;
  end;
Danach zwei Funktionen zum Ermitteln und Schreiben der Zeitstempel:

Delphi-Quellcode:
function getZeitstempel(datei: widestring): TZeitstempel;
var
  dates: TZeitstempel;
  h: THandle;
begin
  if datei[length(datei)] = '\then setlength(datei,length(datei)-1);
  h := CreateFileW(PWideChar(datei), $0080, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  GetFileTime(h, @dates.creation, @dates.lastchange, @dates.lastaccess);
  result := dates;
end;

function setZeitstempel(datei: widestring; daten: TZeitstempel): boolean;
var
  h: THandle;
begin
  if datei[length(datei)] = '\then setlength(datei,length(datei)-1);
  h := CreateFileW(PWideChar(datei), $0100, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  result := SetFileTime(h, @daten.creation, @daten.lastchange, @daten.lastaccess);
end;
Beim CreateFileW, das $0080 bedeutet FILE_READ_ATTRIBUTES und das §0100 FILE_WRITE_ATTRIBUTES, über das Handle kann also nur auf die Dateiattribute zugegriffen werden.

Und der Part mit dem eigentlichen Kopiervorgang sieht dann so aus:

Delphi-Quellcode:
tempzeitstempel := getzeitstempel(quelle);
copyfilew(pwidechar(quelle),pwidechar(ziel),false);
setzeitstempel(quelle,tempzeitstempel);
setzeitstempel(ziel,tempzeitstempel);
Damit ist das Problem gelöst!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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