AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit FileTime-Vergleich

Ein Thema von JayBee · begonnen am 18. Jul 2008 · letzter Beitrag vom 20. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
JayBee

Registriert seit: 20. Jul 2006
21 Beiträge
 
Delphi 5 Standard
 
#1

Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 01:40
Hallo,

Ich versuche nun seit über 3 Stunden, 2 Dateidaten zu vergleichen, die Ergebnisse sind immer unterschiedlich aber jedesmal falsch.

Mein Programm Vergleicht das Datum einer Datei auf der Festplatte (welches ich via FileAge() auslese) mit einem als TFileDate/Integer gespeicherten Wert aus einer Datenbank. Sind die 2 Werte unterschiedlich, setzt es den Wert der Datei auf den gespeicherten Wert.

Lasse ich mir die werte über IntToStr ausgeben, sehe ich 2 mal den selben Wert. Vergleiche ich die beiden Werte (if a <> b) sagt mir Delphi, die 2 Werte seien ungleich - selbst nach mehrmaligem schreiben des Wertes durch das Programm.

Lasse ich mir die Differenz der Werte ausgeben (über IntToStr(a-b)), wird mir "0" angezeigt - bei einer Abfrage ist dieser Wert aber ungleich 0.

In meiner Verzweiflung habe ich nun schon versucht, die Differenz der Werte in einen String und dann zurück in einen Integer umzuwandeln, da der "sichtbare" Wert ja 0 war - aber ebenfalls bekomme ich die Meldung der Wert sei ungleich 0.

Habe auch schon im Forum gesucht - aber selbst die Abfrage |a-b| < 1 ist laut Delphi unwahr.

Ich hoffe irgendwer hat den kleinen Denkanstoß der fehlt, um das ganze zu beheben...
Grüße
JayBee


PS: Ich nutze Delphi 5 Personal, beide Werte sind als Integer Deklariert und der "Datenbankwert" wird über
FTime := StrToInt(t[2]); eingelesen, wobei t als array of string deklariert ist - ich weiß, nicht schön aber es klappt
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 09:04
Moin JB,

die Zeitstempel einer Datei (LastAccessTime, CreationTime, ...) haben eine unterschiedliche Auflösung, die auch noch je nach Dateisystem (FAT, NTFS) variiert. Wenn du also einen Vergleich zwischen einem willkürlich festgelegten Zeitstempel und einem realistischen Zeitstempel durchführst, dann musst du den willkürlichen erst nach Maßgabe des Windows SDK normieren.

Welchen Zeitstempel deiner Datei versuchst du wie zu verändern? Die Dokumentation zu SetFileTime() beschreibt das Problem für NTFS ganz gut. Das fällt dir natürlich nie auf, wenn du nur die inzwischen veraltete Dokumentation konsultierst, die bei D5 mit ausgeliefert wurde.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 09:10
wenn die ausgabe 0 ist sollte es auch mit der Vergleich stimmen erst recht wenn du vorher noch zu String convertierst und zurück.
Zeit doch mal den ganzen Quelltext. Ich vermute eher das du da irgendwo ausversehen die falschen Variablen miteinander vergleichst.
Das einfachste ist übrigens einfach beim Vergleich mal den Debugger zu nutzen und sich die Werte der beiden Variablen anzeigen zu lassen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
JayBee

Registriert seit: 20. Jul 2006
21 Beiträge
 
Delphi 5 Standard
 
#4

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 13:28
Ok, auf die Idee mit dem Debugger hätte ich auch selber kommen können ^^

Dort werden mit nämlich tatsächlich verschiedene Werte angezeigt (bsp. 951815369 für Data.FTime und 954116721 für FileAge(FileName)). Den Wert 0 habe ich in meiner unachtsamkeit nach SetFileDate ausgeben lassen --> da war das Datum geändert und die Differenz logischerweise 0 --> mein Fehler

Was mir aber nun schleierhaft ist: Wenn ich die Funktion zum Vergleichen und Ändern 2 mal aufrufe - direkt nacheinander - sagt er, das Datum sei noch immer Unterschiedlich. Das heißt für mich, dass der Wert (warum auch immer) nicht wirklich auf die Festplatte geschrieben wird.
Wenn ich mir das im Windows Explorer angucke, sehe ich aber das "richtige", also das gespeicherte Datum - auch nach beendigung des Programms.....

Die Funktion SetFileDate sieht so aus:
Delphi-Quellcode:
function SetFileDate(const FileName: string; FileDate: Integer): Boolean;
var FileHandle: Integer;
begin
 Result := False;
 FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
 if FileHandle > 0 then begin
  Result := (FileSetDate(FileHandle, FileDate) = 0);
  FileClose(FileHandle);
 end;
end;
Das is doch wieder so ein total trivialer Fehler den nur ich nich sehe
Grüße
JayBee

/edit: Die Dateien sind auch nicht schreibgeschützt - Als einziges ist das Archiv-Bit gesetzt.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 13:36
Ich denke (wie bereits auch schon gerschrieben wurde) das du einfach verschiedene Datumsformate vergleichst.
So gibt es eben einen UnixTimeStamp, ein TDateTime (Delphi-Datumswert), FileTime (abhängig von Zeitzone), FileTime (auf Festplatte vermerkte Zeit),.....
und wenn du da nicht aufpasst verlgeichst du zwei völlig verschiedene Werte.
Wenn du Beispielsweise eine Funktion hast welche ein TDateTime zum setzen des Dateidatums verwendest und danach mit einer anderen Funktion einen UnixTimeStamp ausliest so ist dieser verschieden im Vergleich zum TDateTimewert obwohl beide die gleiche Zeit beinhalten.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
JayBee

Registriert seit: 20. Jul 2006
21 Beiträge
 
Delphi 5 Standard
 
#6

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 13:42
Den Wert in der Liste erhalte ich über einen SearchRec - SR.Time und den andren über FileAge

Gesetzt wird der Listenwert über FileSetDate(FileHandle, NewDate)

auch bemerkenswert: bei 2281 Dateien funktioniert alles wie es soll - nur bei 87 nicht
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 13:45
Sind die 87 Stück vielleicht Ordner oder Elemente auf die du keinen Zugriff hast?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
JayBee

Registriert seit: 20. Jul 2006
21 Beiträge
 
Delphi 5 Standard
 
#8

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 13:59
Leider nein - alles Dateien wie die andren auch. Teilweise habe ich hier Ordner, in denen 30 Dateien sind (alles Bilder von der Digitalkamera) - von 28 wird das Datum ordentlich gesetzt, bei 2 nicht.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 14:51
hast du diese dateien vllt versehentlich geöffnet, also mit einem anderen programm zugriff auf die dateien??

oder zb mit dem explorer gerade den ordner geöffnet, dann kann es sein, das einige dateien keine zugriff haben, weil der explorer sie gerade für die datei vorschau lädt... hab ich auch schon mal gehabt...
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
JayBee

Registriert seit: 20. Jul 2006
21 Beiträge
 
Delphi 5 Standard
 
#10

Re: Problem mit FileTime-Vergleich

  Alt 18. Jul 2008, 14:59
Hm... habe gerade folgendes versucht:

Alle Programme im Autostart deaktiviert, Rechner neugestartet, mein Programm gestartet, explorer.exe im Taskmanager beendet

Trotzdem passiert nichts.

Hat Vista irgendwelche Dienste die Dateien blockieren können? Suchindex habe ich asugeschaltet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:58 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