AGB  ·  Datenschutz  ·  Impressum  







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

FileExists/FileDate - Auslesen über Netzwerk langsam

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

n/a Beiträge
 
#1

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 12:17
Zitat:
speichern die Daten alle und vergleichen danach.
Du meinst, dein Programm kopiert die Quelldaten zum Zielverzeichnis und DANACH wird erst geguckt, was im Zielverzeichnis gebraucht wird?

Bei mir ist es so:

ich gehe die Liste der Quelldaten einmal durch.
Dann wird immer geguckt:
- "Gibt es Quell-DateiX auch im Zielverzeichnis? (FileExists)
- JA > Quelldatei mit Zieldatei vergleichen (Datum)
- Quelldatei neuer als Zieldatei? JA > in eine andere Liste schreiben (keine StringList...)

Lasse ich FileExists und den Datumsvergleich weg, ist alles wunderbar zackig schnell.
Seltsam ist ja nur.. es ist NUR von PC-HDD zu Netzwerk-HDD langsam.
  Mit Zitat antworten Zitat
zeras

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

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 12:36
Zitat:
speichern die Daten alle und vergleichen danach.
Du meinst, dein Programm kopiert die Quelldaten zum Zielverzeichnis und DANACH wird erst geguckt, was im Zielverzeichnis gebraucht wird?
Ich denke, jaenicke scannt Quell und Zielverzeichnis in einem Ruck durch und prüft dann, welche Unterschiede es gibt. Danach wird dann kopiert oder eben nicht.
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
 
#3

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 12:50
1. Daten sammeln (Dateien einmal scannen und die Daten in eine Liste ablegen)
2. Gesammelten Daten vergleichen und zu kopierende Dateien in einer Liste ablegen
3. Dateien nach der Liste kopieren

Was du machst:
1. Einzelne Datei scannen
2. Vergleichen
3. Kopieren
Es muss also für jede einzelne Datei alles immer wieder neu initialisiert werden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#4

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 15:53
1. Daten sammeln (Dateien einmal scannen und die Daten in eine Liste ablegen)
2. Gesammelten Daten vergleichen und zu kopierende Dateien in einer Liste ablegen
3. Dateien nach der Liste kopieren

Was du machst:
1. Einzelne Datei scannen
2. Vergleichen
3. Kopieren
Es muss also für jede einzelne Datei alles immer wieder neu initialisiert werden.

Ich sammle erst alle Daten (Quelle) und speichere sie in einer Liste (das geht schnell). Danach gehe ich die Liste durch und prüfe
- gibt es Quell-Datei1 auch im Zielverzeichnis.
https://www.delphi-treff.de/tipps-tr...ateien-suchen/

Daraus baue ich eine neue Liste und die wird später abgearbeitet (Daten werden kopiert).
Anders wüsste ich nicht, wie man Daten vergleichen soll.

Geändert von dGeek (11. Sep 2016 um 16:06 Uhr)
  Mit Zitat antworten Zitat
zeras

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

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 16:03

Ich sammle erst alle Daten (Quelle) und speichere sie in einer Liste (das geht schnell).
Mache doch das gleiche mit deinem Zielsystem. Wie lange dauert denn das?

Sammle die vorhandenen Infos aus dem Ziel und vergleiche diese mit dem Quellsystem. Bei Differenzen musst du dann reagieren und gegebenenfalls kopieren.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#6

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 16:06
Guck mal mein Beispiel. Nicht das Sammeln der Daten ist das Problem

Kleines Beispiel. Es wurde alles weggelassen bis auf das, wo es hapert.
Das hier braucht rund 23 Sekunden (D:\ = im PC, Y:\ = Festplatte am Router per USB 100 MBit): (keine der Dateien existiert)
Delphi-Quellcode:
function FileTimeToDateTime(FileTime: TFileTime): TDateTime;
var
 ModifiedTime: TFileTime;
 SystemTime: TSystemTime;
begin
 Result := 0;
 if (FileTime.dwLowDateTime = 0) and (FileTime.dwHighDateTime = 0) then
  Exit;

 FileTimeToLocalFileTime(FileTime, ModifiedTime);
 FileTimeToSystemTime(ModifiedTime, SystemTime);
 Result := SystemTimeToDateTime(SystemTime);
end;

function getFileLastModified(const aFileName: string): TDateTime;
begin
 Result := FileTimeToDateTime(JclFileUtils.GetFileLastWrite(aFileName));
end;

function IsFileANewerFileB(aFileA, aFileB: string): Boolean;
var
 bRes: Boolean;
begin
 if (not FileExists(aFileB)) or (not FileExists(aFileA)) then
  bRes := True
 else
  bRes := getFileLastModified(aFileA) > getFileLastModified(aFileB);

 Result := bRes;
end;

/////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
 freq: Int64;
 startTime: Int64;
 endTime: Int64;
 i: Integer;
 a, b: String;
begin
 QueryPerformanceFrequency(freq);
 QueryPerformanceCounter(startTime);

 a := 'D:\Datei1.txt';
 b := 'Y:\Datei2.txt';

 for i := 0 to 9999 do
  begin
   if IsFileANewerFileB(a, b) then
    begin
    end;
  end;

 QueryPerformanceCounter(endTime);

 ShowMessage('Die Routine benötigte etwa ' + IntToStr((endTime - startTime) * 1000 div freq) + 'ms');
end;
/////////////////////////////////////////////////////////////////////////////////
Wenn Y:\ durch D:\ ausgetauscht wird, dauert das Ganze 50ms.
  Mit Zitat antworten Zitat
zeras

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

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
Antwort Antwort

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 21:06 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