![]() |
Schleife bringt verschiedene Ergebnisse
Hallo,
vorab: ich habe mit 2 Dateien kopiert um diese Funktion zu testen, hab jetzt also 2 doppelte Dateien. Mit unten stehendem Code bringt er mal gar kein Ergebnis, mal nur die 2. doppelte Datei mal korrekt beide doppelte Dateien und mdann auch noch beim ersten Click die 2. Kopie und beim nochmaligem Click beide Kopien. Woran liegts? Ich kann es nicht erkennen. ps: Die Funktion CompareFile ist hier aus dem Forum von negaH
Delphi-Quellcode:
Gruß
procedure TForm1.Button18Click(Sender: TObject);
var i: integer; FileName1, FileName2: string; begin Gauge1.MaxValue := lvOrganisation.Items.Count - 1; for i := 0 to lvOrganisation.Items.Count - 1 do begin if i = lvOrganisation.Items.Count -1 then exit; FileName1 := lvOrganisation.Items[i].SubItems[0] + lvOrganisation.Items[i].SubItems[1]; FileName2 := lvOrganisation.Items[i+1].SubItems[0] + lvOrganisation.Items[i+1].SubItems[1]; if CompareFile(FileName1, FileName2) = True then ListBox1.Items.Add('doppelt?: ' + FileName1); Application.ProcessMessages; Gauge1.Progress := i; end; // i end; ereetzer |
AW: Schleife bringt verschiedene Ergebnisse
Zitat:
Warum nicht
Delphi-Quellcode:
?
for i := 0 to lvOrganisation.Items.Count - 2 do
Zitat:
Delphi-Quellcode:
if CompareFile(FileName1, FileName2) then
|
AW: Schleife bringt verschiedene Ergebnisse
Da hast Du recht, habs auch schon geändert, ändert aber nichts am Problem.
Am häufigsten kommt einfach gar kein Ergebniss. als 2.häufigstes Ergebnis kommt erst die 2. Kopie-->bei nochmal klicken dann beide Und ganz selten korrekt beide Dateien. |
AW: Schleife bringt verschiedene Ergebnisse
So wie ich das sehe vergleichst du immer nur benachbarte Elemente miteinander, also [i] mit [i+1]. D.h. du kannst doppelte nur finden wenn sie in der Liste hintereinander stehen. Tun sie das nicht, z.B. wenn die Doppelten in [3] und [5] stehen, werden sie nicht gefunden da [3] nie mit [5] verglichen wird. Du Vergleichst nur ... [2] mit [3], [3] mit [4], [4] mit [5], [5] mit [6] ... aber die Elemente [3] mit [5] vergleichst du nie miteinander.
Oder ist die Liste lvOrganisation.Items[] irgendwie nach Dateigröße sortiert? D.h. je nachdem wie du die Liste füllst sind die doppelten mal hintereinander in der Liste, und mal nicht. Entsprechend ist dein Ergebnis unterschiedlich. |
AW: Schleife bringt verschiedene Ergebnisse
Hmm, Du hast recht.
Aber in diesen Testzeilen stehen die doppelten Dateien tatsächlich IMMER hintereinander (Am Dateiname hängt einfach nur nochmal "Kopie"). ... So, hab schnell mal eine doppelte Schleife getestet: genau das gleiche: verschiedene Ergebnisse und logischerweise längere Vergleichsdauer. |
AW: Schleife bringt verschiedene Ergebnisse
Hmm, wenn ich mich nicht täusche, liegts an CompareFile.
In dieser Unit sind noch andere Funktionenenthalten, womit es auch funktioniert. Warum also nicht mit CompareFile(File1, File2). Ich selbst kann nicht erkennen, warum. Hier die Unit FileCompare ![]() |
AW: Schleife bringt verschiedene Ergebnisse
Was für Dateien vergleichst Du eigentlich? Nicht das die sich laufend ändern... ;-)
Lass Dir mal die Dateinamen ausgeben, die verglichen werden und die angeblich identisch sind... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 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