AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein FileExists/FileDate - Auslesen über Netzwerk langsam
Thema durchsuchen
Ansicht
Themen-Optionen

FileExists/FileDate - Auslesen über Netzwerk langsam

Ein Thema von dGeek · begonnen am 10. Sep 2016 · letzter Beitrag vom 12. Sep 2016
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.651 Beiträge
 
Delphi 12 Athens
 
#1

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 16:39
Du solltest einen kompletten Scan auf dem Quellsystem (FindFirst, FindNext, FindClose) machen und das gleiche auf dem Zielsystem. Dann hast du 2 Listen, die du vergleichen kannst. Dann musst du entscheiden, was gemacht werden soll.
Im Moment machst du das mit jeder Datei einzeln,
FileExists, FileTimeToDateTime etc. Das wird dir wohl die Zeit kosten.


Nimm doch einmal
FindFirst, FindNext, FindClose und prüfe deine Zeit lokal und im Netz. Das andere ist nur Rechnerei auf deinem PC, was nicht die Welt an Zeit kosten wird.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#2

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 16:46
Ich verstehe diesen Ansatz nicht so ganz.

Wenn ich das so mache wie du sagst, dann muss ich die Dateien ja trotzdem gegenprüfen und gucken, ob DateiX im Zielverzeichnis existiert usw.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.651 Beiträge
 
Delphi 12 Athens
 
#3

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 17:04
Ich verstehe diesen Ansatz nicht so ganz.

Wenn ich das so mache wie du sagst, dann muss ich die Dateien ja trotzdem gegenprüfen und gucken, ob DateiX im Zielverzeichnis existiert usw.
Nein, da du ja mit FindFirst, FindNext und FindClose schon weißt, ob die Datei da ist.

Wie gesagt, Quelle scannen in eine Liste, Ziel scannen in eine weitere Liste und die Listen dann gegeneinander abgleichen.
Dann hast du nur 1x einen scan in der Quelle und ein scan im Ziel.

Hier ein Beispiel mit Suche von Verzeichnissen. In der StringList (SL) stehen dann erst einmal die Dateinamen. Gegebenenfalls noch das Datum mit dranhängen oder anderweitig speichern.
Das machst du in der Quelle und im Ziel.

Delphi-Quellcode:
            if SysUtils.FindFirst(Dir + '*.*', SysUtils.faDirectory, SR2) = 0 then
              repeat
                if ((SR2.attr and faDirectory) = faDirectory)
                then

                SL.Add();
              until SysUtils.FindNext(SR2) <> 0;
            finally
              FindClose(SR2);
            end;
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#4

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 17:20
Jetzt hab ich es endlich kapiert
Also von der Logik her ungefähr so?

- erstelle Liste "Quelle"
- erstelle Liste "Ziel"

- iteriere durch Liste "Quelle"
-- prüfe, z.B. mit IndexOf (StringList), ob Eintrag N der Liste "Quelle" in Liste "Ziel" ist
--- wenn ja > weitere Prüfungen (Datumsvergleich)

Bitte sag mir, dass ich es kapiert habe
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.651 Beiträge
 
Delphi 12 Athens
 
#5

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 17:25
Jetzt hab ich es endlich kapiert
Also von der Logik her ungefähr so?

- erstelle Liste "Quelle"
- erstelle Liste "Ziel"

- iteriere durch Liste "Quelle"
-- prüfe, z.B. mit IndexOf (StringList), ob Eintrag N der Liste "Quelle" in Liste "Ziel" ist
--- wenn ja > weitere Prüfungen (Datumsvergleich)

Bitte sag mir, dass ich es kapiert habe
Ja so sollte es klappen. Am besten, man merkt sich beim Scannen gleich noch das Datum der letzten Änderung. Ansonsten musst du dann nochmal scannen wegen des Datums. Aber mach doch mal einen Test und gib die Scanzeiten von Quelle und Ziel durch.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 17:56
Die Listen enthalten natürlich die erforderlichen Daten zum Vergleichen. Entweder ein Array mit Records oder besser eine Objektliste.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#7

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 18:07
Ist das hier auch OK?

Delphi-Quellcode:
// ...
if WithSubDirs then
 sFileDate := ',' + FloatToStr(SR.TimeStamp)
else
 sFileDate := '';

List.Add(SR.Name + sFileDate); // Ich will nur die Dateinamen mit SubbDir in der Liste haben (SR.Name)
// ...
Ein erster Test:
- Ein Vergleich von 10.000 Dateien im Quell- UND Zielverzeichnis dauert mit "sFileDate" da oben ~ 24 bis 26 Sekunden.
- mit dem Vergleich "if getFileLastModified(aFileA) > getFileLastModified(aFileB) then" in etwa 130 Sekunden.

Denkt ihr, 24 Sekunden sind erträglich? Bedenke: Quell-Verzeichnis ist die HDD im PC, Zielverzeichnis die HDD am Router (also langsam).
Von C nach D gehts schneller (~12 Sekunden).
  Mit Zitat antworten Zitat
Antwort Antwort


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:10 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