Autor Beitrag
Boller
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Do 15.11.07 10:50 
Hallo,

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.Button1Click(Sender: TObject);
var
  fh : THandle;
  fn : string;
  fCreationTime : FileTime;
  fLastAccessTime : FileTime;
  fLastWriteTime : FileTime;
  TempDateTime : TDateTime;
begin
  fn := 'c:\test.txt';
  fh := FileOpen(fn, fmOpenRead);
   GetFileTime(fh, @fCreationTime, @fLastAccessTime, @fLastWriteTime);
//   TempDateTime := FileTimeToDateTime(fLastWriteTime);

//  // Hier manipulieren der Wert ist beim Debuggen auch gleich dem anderen Datum

   fLastAccessTime := fLastWriteTime; //bis hier hin in Ordnung

   SetFileTime(fh, @fCreationTime, @fLastAccessTime, @fLastWriteTime);

   //Das Datum letzter Zugriff der Datei wird aber nicht abgeändert!

  CloseHandle(fh);



sieht jemand den Fehler und könnte mir den korrigierten Code Snippet dazu schreiben?



danke

Boller
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Do 15.11.07 11:05 
Könnte vielleicht an dem Dateiattribut fmOpenRead liegen....

Aber zumindest sollte eine Fehlermeldung (Lasterror) stattfinden. Ich kann mir net vorstellen, dass dann einfach nichts passiert...

_________________
Es gibt keine Probleme - nur Lösungen!
Boller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Do 15.11.07 11:28 
Titel: hat funktioniert
fmOpenReadWrite dann funktioniert der Code


thx

Bolli
Boller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Do 15.11.07 11:48 
Titel: muss doch noch einmal nachhaken
Hallo,

habe gemerkt das das mit dem Setfiletime funktioniert

aber das closehandle ändert vom System her selbst dass Zugriffsdatum.

Wie könnte man das Zugriffsdatum sonst noch ändern ohne die Systemzeit hin und her stellen zu müssen *g*
Boller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Do 15.11.07 14:19 
Titel: Ändern des Zugriffs TimeStamp der Datei funktioniert gar nic
Hallo,

also das Ändern des Attributes der Datei "letzter Zugriff" kann man gar nicht abändern, oder?

Habe die Systemzeit sogar umgestellt auf die Datei zugegriffen und nach dem Close des Files die systemzeit zurück gestellt.

das Datum der Datei hat sich dabei mit umgestellt, obwohl das Handle der Datei schon weg war!

hmmm
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Fr 16.11.07 06:51 
Hallo!

Das ging mir gestern auch durch den Kopf, als ich diesen Artikel las.
Die Information "letzter Zugriff" bedeutet doch, wann immer ein Programm (oder das System) mitunter auch lesend auf die Datei zugreift, wird diese Information geupdated. Also kann man es gar nicht verändern (schon ein Virenscan dürfte das bewirken).

Vielleicht sollte man erst einmal genau klären, was genau die einzelnen Datumsinformationen konkret bedeuten, die man da hat.

Auf der anderen Seite - warum sollte man es ändern. ;-)

Ich denke, dass es mehr Sinn macht, (wenn überhaupt was zu ändern), das Erstelldatum zu ändern.

Wenn es aber unbedingt sein muss, dann würde ich die Einträge der FAT32 bzw. NTFS-Dateitabelle(n) direkt auf der Festplatte verändern. Aber 1. weiß ich net, wie das gehen könnte und 2. sollte ein guter Virenscanner solche Dinge eh abblocken. :lol:

_________________
Es gibt keine Probleme - nur Lösungen!
gispos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94

WIN 7
XE10, D2007
BeitragVerfasst: So 18.11.07 22:46 
LastAccessTime zu ändern ist ohnehin keine gute Idee!
Unter WIN-XP und ??? kann der User diese Aktualisierung sogar abschalten (Speed). Und
somit wird dann LastAccessTime nie wieder aktualisiert.

Gruß gispos
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mo 19.11.07 02:37 
user profile iconLogikmensch hat folgendes geschrieben:
...
Vielleicht sollte man erst einmal genau klären, was genau die einzelnen Datumsinformationen konkret bedeuten, die man da hat.

Auf der anderen Seite - warum sollte man es ändern. ;-)

...


LastAccessTime ist eben die Last Access Time und wird folglich bei jedem Zugriff geändert, auch beim Lesen von LastAccessTime.

Bei Einführung hat MS irgendwo mal empfohlen (das findet sich sicher noch immer in den Tiefen des MSDN, aber keine Ahnung wo), dass speziell Programme, die LastAccessTime auslesen, und ebenso Backup-Software diesen Wert nach dem Zugriff auf den zuvor gelesenen Wert zurückstellen soll, damit diese Zugriffe "unsichtbar" bleiben. Soweit ich mich erinnern kann, sollte "dir" mit der entsprechenden Option sich auch so verhalten.

Zur Frage: man sollte es ändern, damit es sich nicht ändert :-)

Gruss Reinhard

PS: bei MS war von Systemprogrammen die Rede, möglicherweise sind besondere Rechte notwendig.

PS2: der Code war wohl schon richtig, folgendes ist Original MS:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
        static void touchFile(FileSystemInfo fsi)
        {
            Console.WriteLine("Touching: {0}", fsi.FullName);

            // Update the CreationTime, LastWriteTime and LastAccessTime.
            try
            {
                fsi.CreationTime = fsi.LastWriteTime = fsi.LastAccessTime =
                    DateTime.Now;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: {0}", e.Message);
            }
        }


Moderiert von user profile iconNarses: Code- durch C#-Tags ersetzt