AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dateidatum, Dateien vergleichen und Kopieren

Ein Thema von Grisu2000 · begonnen am 12. Feb 2019 · letzter Beitrag vom 14. Feb 2019
Antwort Antwort
Seite 1 von 2  1 2   
Grisu2000

Registriert seit: 2. Jan 2014
6 Beiträge
 
#1

Dateidatum, Dateien vergleichen und Kopieren

  Alt 12. Feb 2019, 18:03
Hallo,
ich versuche zwei Dateien zu vergleichen (Zeitstempel) und dann entweder von USB-Stick auf Festplatte oder von Festplatte auf USB zu kopieren.
Ist die Datei nur auf einem Medium vorhanden funktioniert das Kopieren in beide Richtungen.
Ist auf beiden Medien (Festplatte und USB) die Datei vorhanden funktioniert das Überschreiben nur von USB auf Festplatte. Beim Überschreiben von Festplatte auf USB gibt es einen Zeitversatz bei den Zeitstempeln von 2 Sekunden, d.h. nach dem Überschreiben ist die Datei auf dem USB-Stick neuer als auf der Festplatte.
Ich könnte natürlich jetzt erst die Datei löschen und dann neu Schreiben, mich würde aber interessieren, ob es anstatt FileAge oder CopyFile bessere Befehle gibt, damit die Dateien nach einem Kopiervorgang wirklich gleich sind .

Hier der Codeteil, den ich dafür benutze:
Delphi-Quellcode:
FileAge(Datei1,Datum1,true);
FileAge(Datei1USB,Datum2,true);
if Datum1>Datum2 then
   copyfile(PChar(Datei1),PChar(Datei1USB),false);
if Datum1<Datum2 then
   copyfile(PChar(Datei1USB),PChar(Datei1),false);

Danke und Gruß
Hanns-Dieter
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 12. Feb 2019, 18:20
Hallo,
setz doch nach dem Kopieren das Datum noch mal neu (SetFileAge).
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 12. Feb 2019, 19:57
Hallo,

ich nutze zum Vergleich TFile.GetLastWriteTime, da ich früher mit ähnlichen Problemen zu tun hatte.
Da es sich um TDateTime-Werte handelt, lasse ich aber dennoch eine gewisse Toleranz beim Vergleich zu. Die liegen allerdings im Millisekunden-Bereich.
Peter
  Mit Zitat antworten Zitat
Grisu2000

Registriert seit: 2. Jan 2014
6 Beiträge
 
#4

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 12. Feb 2019, 23:47
Danke schon mal für die schnelle Antwort. Wie machst Du das mit der Toleranz? Hast Du das ein Beispiel für mich?
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 13. Feb 2019, 06:42
TDateTime sind intern Float-Werte.

Da ich das in einer alten Anwendung nutze, ziehe ich einfach die beiden Werte voneinander ab und prüfe, ob der Absolut-Wert kleiner 0.0001 ist.

Man kann aber auch die "neue" Funktion IsZero dafür nutzen. Entweder gab es die bei meiner damaligen Umstellung noch nicht oder ich wusste nicht, dass es die schon gab. Sonst hätte ich die dafür verwendet.
Peter
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 13. Feb 2019, 08:29
Du kannst (z. B. mit dem DEC) Hashes erstellen (z. B. MD5) und damit die Dateien vergleichen. Sind die beiden Dateien identisch ist auch der Hash 100%ig gleich. Ich denke das ist besser als FileAge zu verwenden.
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 13. Feb 2019, 08:31
.. bleibt dann nur die Frage welche Datei dann aktueller ist.
Nur am Hash wird man dies nicht erkennen können.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 13. Feb 2019, 08:31
Ich nutze die Version von DelphiTreff:
Delphi-Quellcode:
function GetFileVersion(Path: string): string;
var
  lpVerInfo: pointer;
  rVerValue: PVSFixedFileInfo;
  dwInfoSize: cardinal;
  dwValueSize: cardinal;
  dwDummy: cardinal;
  lpstrPath: pchar;

begin
  if Trim(Path) = EmptyStr then
    lpstrPath := pchar(ParamStr(0))
  else
    lpstrPath := pchar(Path);

  dwInfoSize := GetFileVersionInfoSize(lpstrPath, dwDummy);

  if dwInfoSize = 0 then
  begin
    Result := 'No version specification';
    Exit;
  end;

  GetMem(lpVerInfo, dwInfoSize);
  GetFileVersionInfo(lpstrPath, 0, dwInfoSize, lpVerInfo);
  VerQueryValue(lpVerInfo, '', pointer(rVerValue), dwValueSize);

  with rVerValue^ do
  begin
    Result := IntTostr(dwFileVersionMS shr 16);
    Result := Result + '.' + IntTostr(dwFileVersionMS and $FFFF);
    Result := Result + '.' + IntTostr(dwFileVersionLS shr 16);
    Result := Result + '.' + IntTostr(dwFileVersionLS and $FFFF);
  end;
  FreeMem(lpVerInfo, dwInfoSize);

end; {function GetFileVersion() ...}
Aufgerufen wird diese dann:

Delphi-Quellcode:
variable1 := GetFileVersion('USB.exe');
variable2 := GetFileVersion('HDD.exe');
Und was die Auswertung angeht, kommt es auf den Aufbau der Versionsnummer an. Gehe ich von dem gleichen Aufbau wie in Delphi aus, wäre eine Möglichkeit die Dateiversion in teilen zu prüfen. Dabei würde ich wie folgt vorgehen:

1. Die Dateiversionen nach '.' durchsuchen und zählen (= Anzahl der zu prüfenden Zahlen + 1; evtl. Vergleichen ob beide Versionsnummern die gleiche Anzahl haben!) z.B.(Herkunft weiß ich nicht mehr^^):
Delphi-Quellcode:
function Split(text: string; delimiter: char; p: integer): string;
var
  stl: TStrings;
begin
  stl := TStringList.Create;
  try
    stl.delimiter := delimiter;
    stl.DelimitedText := text;
  finally
    result := stl.Strings[p];
    stl.free;
  end;
end;
Aufruf:
split(String, '.', Teil);
2. Die entsprechenden Teile mit einander vergleichen, von vorne nach hinten.
3. Sobald sie unterschiedlich sind, prüfen welche größer ist und die Vergleichs-Schleife verlassen.
4. Kopiervorgang abhängig der letzten Prüfung einleiten.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (13. Feb 2019 um 09:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 13. Feb 2019, 09:11
.. bleibt dann nur die Frage welche Datei dann aktueller ist.
Nur am Hash wird man dies nicht erkennen können.
Korrekt! Nutzt Du den USB-Stick als Backup, sollte die Festplatte das führende Medium sein.
Wenn aber der Stick für den Datenaustasch "onthefly" genutzt wird,hilft nur die Beurteilung durch den Nutzer.Aber alle gleichen Dateien fallen dann schon einmal weg.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#10

AW: Dateidatum, Dateien vergleichen und Kopieren

  Alt 13. Feb 2019, 09:25
@Moombas

Ja, aber nur wenn es sich um Dateien handelt, die auch diese Versionsinformationen in sich tragen, was ich hier bezweifeln möchte
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:26 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