AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Dateioperationen, schneller als mit SHFileOperation?

Dateioperationen, schneller als mit SHFileOperation?

Ein Thema von alzaimar · begonnen am 9. Feb 2010 · letzter Beitrag vom 10. Feb 2010
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Dateioperationen, schneller als mit SHFileOperation?

  Alt 9. Feb 2010, 22:04
Ich möchte folgende Operation mit so wenig wie möglich Netzwerklast implementieren:
Code:
  If File is Directory then
    CopyAllFiles(File, TargetDirectory)
  else
   CopyOneFile (File, TargetDirectory)
Mein bisheriger Ansatz: CopyFile aufrufen (ich versuch's einfach mal). Wenn es nicht funktioniert und GetLastError=5 (Access denied) ist, könnte es ein Verzeichnis sein. Dann versuche ich mein Glück einfach.

Ich erspare mir also, jedesmal erst zu prüfen, ob es sich bei 'Filename' um ein Verzeichnis handelt.

Delphi-Quellcode:
procedure TFileOperation.CopyFileOrDirectory (filename, destination : String);
  Procedure _CheckResult(aOpResult : Boolean);
  Begin
    if not aOpResult then
      if GetLastError()=5 then
        raise EAccessDeniedException.Create('');
  End;

begin
  Try
    _CheckResult(CopyFile(PChar (filename), PChar (destination ), False));
  Except
    On E:EAccessDeniedException Do
      CopyDirectory (filename, destination);
  end;
end;
Geht das noch resourcenschonender oder ruft CopyFile eh intern irgendwo vermutlich 'IsDirectory' auf?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#2

Re: Dateioperationen, schneller als mit SHFileOperation?

  Alt 9. Feb 2010, 22:31
Hallo alzaimar, mir ist noch nicht ganz klar wie du zu der Liste der zu kopierenden Files kommst.
Irgendwie musst Du ja die Liste erstellen (suchen ab einem bestimmten Verzeichnis?? etc.),
und da könnte man doch unterscheiden ob Directory or not?
FindFirstFile --> FindNextFile --> if Filename = . or = .. dann Directory?

Sehe ich das richtig, dass du von einem Netzlaufwerk zu einem Anderen, über SMB, diverse File-Strukturen kopieren willst?

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Dateioperationen, schneller als mit SHFileOperation?

  Alt 9. Feb 2010, 22:42
Hi Astat,
... stimmt, ich bin ja auch ein Depp.

Deine Nachfragen beinhalten die Lösung.

Ich erstelle mit FindFirst/FindNext ein Verzeichnis, aus dem ich die zu kopierenden Dateien auswähle.. Die packe ich Depp in eine Stringliste und baue mir eine separate Methode, die alle Dateien dieser Stringlist kopiert, und wenns ein Verzeichnis ist, dann..

Ich weiss doch aber beim Erstellen der TStringlist, worum es sich handelt.

Aua, tut das weh
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#4

Re: Dateioperationen, schneller als mit SHFileOperation?

  Alt 10. Feb 2010, 00:51
Zitat:
Delphi-Quellcode:
Try
  _CheckResult(CopyFile(PChar (filename), PChar (destination ), False));
Except
  On E:EAccessDeniedException Do
    CopyDirectory (filename, destination);
end;
Wenn z.B. das Kopieren einer Datei Aufgrund verbotener Rechte schief geht,
dann kann/wird CopyDirectory auch schiefgehn ... und es wird keine Fehlermeldung ausgelöst.

PS: das Try-Except ist ja wohl nur da, um die im "Fehlerfall" absichtlich ausgelöste Exception abzufangen und das ist eine Mißhandlung dieser "Ausnahmebehandlung".

Da du die Rückgabewerte eh nicht genau auswärtest, hätte dieses vollkommen ausgereicht.
Delphi-Quellcode:
procedure TFileOperation.CopyFileOrDirectory (filename, destination : String);
begin
  CopyFile(PChar (filename), PChar (destination), False))
    or CopyDirectory(filename, destination);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Dateioperationen, schneller als mit SHFileOperation?

  Alt 10. Feb 2010, 05:43
Zitat von himitsu:
Zitat:
...das Try-Except ist ja wohl nur da, um die im "Fehlerfall" absichtlich ausgelöste Exception abzufangen und das ist eine Mißhandlung dieser "Ausnahmebehandlung".
Sie kann sich ja beschweren. Die Frage lautet ja: Wie bekomme ich das am schnellsten hin (muss über eine VPN-Verbindung Dateien und Verzeichnisse kopieren)

Zitat von himitsu:
Da du die Rückgabewerte eh nicht genau auswertest, hätte dieses vollkommen ausgereicht.

Delphi-Quellcode:
procedure TFileOperation.CopyFileOrDirectory (filename, destination : String);
begin
  CopyFile(PChar (filename), PChar (destination), False))
    or CopyDirectory(filename, destination);
end;
Wo finde ich dieses 'CopyDirectory'?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Tom

Registriert seit: 8. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Dateioperationen, schneller als mit SHFileOperation?

  Alt 10. Feb 2010, 06:07
Zitat von alzaimar:
Wo finde ich dieses 'CopyDirectory'?
Bei Dir ...
Zitat von alzaimar:
Delphi-Quellcode:
  Try
    _CheckResult(CopyFile(PChar (filename), PChar (destination ), False));
  Except
    On E:EAccessDeniedException Do
      CopyDirectory (filename, destination);
  end;
end;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Dateioperationen, schneller als mit SHFileOperation?

  Alt 10. Feb 2010, 06:39
Wieso bin ich in letzter Zeit so mental inkompentent?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#8

Re: Dateioperationen, schneller als mit SHFileOperation?

  Alt 10. Feb 2010, 06:51
Zitat von alzaimar:
Wieso bin ich in letzter Zeit so mental inkompentent?
wir werden langsam alt http://www.greensmilies.com/smile/sm...ticons_opa.gif, mach dir nichts draus
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Dateioperationen, schneller als mit SHFileOperation?

  Alt 10. Feb 2010, 09:24
Es tut gut, festzustellen, dass es nicht nur mir... was wollte ich nochmal sagen? Hallo Fräulein?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
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 07:47 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