Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi Programm soll dateien kopieren (https://www.delphipraxis.net/944-delphi-programm-soll-dateien-kopieren.html)

R.Meyrat 8. Okt 2002 13:10

Hallo Zusammen
Habe da noch einetn Tip für Win2k Besitzer:
Schaut Euch doch mal das ResourceKit an, da müsste as Proggi RoboCopy dabei sein.
ist "nur* knapp 100KB gross und ist zum Kopieren von vielen Daten geeignet. Kann auch Verzeichnisse etc spiegel usw.

Ist erheblich schneller als die Win-Api etc.

Bauche das Prog um aus einem Delphi Programm ca 4000 Dateien synchron zu halten. Starte "einfach" ein neuer Prozess ...


Habe mal den passenden Code unten für solche dies interessiert.


Gruss Roger

Code:
try
    Screen.Cursor := crHourglass;
    Result := False;
    StatusBar.Panels[1].Text := 'lokales Verzeichnis :' + slocalPath +
      ' wird mit :' + sRemotePath + ' abgeglichen .....';
    if pnlMarker.Color = clBtnface then
      pnlmarker.Color := clRed;
    Application.ProcessMessages;
    sPara := sRemotePath + ' ' + slocalPath + ' ';
      { Source und Destination Verzeichnisse}
    sTemp := saMask[0]; { Filter für Einrichtpläne}
    sTemp := StringReplace(sTemp, ';', ' ', [rfReplaceAll]);
    sPara := SPara + sTemp + ' ';
    sTemp := saMask[1]; { Filter für NC - Programme}
    sTemp := StringReplace(sTemp, ';', ' ', [rfReplaceAll]);
    sPara := sPara + sTemp + ' ';
    sPara := sPara + '/S '; { Inklusive SubDirectorys}
    if LBoxEX_DIR.Items.Count > 0 then begin
      sPara := sPara + '/XD '; { Exclude Directorys}
      for iCounter := 0 to LBoxEX_DIR.Items.Count - 1 do begin
        if trim(LBoxEX_DIR.Items[iCounter]) <> '' then
          sPara := sPara + LBoxEX_DIR.Items[iCounter] + ' ';
      end;
    end;
    sPara := sPara + '/MIR '; {Befehl zum Mirroring}
    sPara := sPara + '/R:10 '; { 10 Versuche die Datei zu kopieren}
    spara := sPara + '/W:10 '; { jeweils 10Sek warten zwischen Versuchen}
    sPara := Spara + '/LOG:' + lbledtLogFile.Text; {und LogDatei erstellen}
    FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
    StartupInfo.cb := Sizeof(TStartupInfo);
    StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow := SW_HIDE;
    if CreateProcess(nil, { Anwendungsname}
      PChar(ExtractFilePath(Application.ExeName) + '\Robocopy.Exe ' + sPara),
    { Parameter}
      nil, { Security}
      nil, { Security}
      False,
      NORMAL_PRIORITY_CLASS, { Priorität}
      nil, { Environment}
      PChar(ExtractFilePath(Application.ExeName)), { Verzeichnis}
      StartupInfo,
      ProcessInfo) then begin
      WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
      CloseHandle(ProcessInfo.hProcess);
    end
    else
      ShowMessage('Fehler beim starten des Kopiervorganges!');
    TimerTimer(self);
    Result := True;
    Screen.Cursor := crDefault;
  except
    Result := False;
    MessageDLG('FEHLER beim Aufruf von Robocopy !' + #10 + #13 +
      ' Funktion : madeLocalCopy()', mtError, [mbOK], 0);
  end;

Christian Seehase 8. Okt 2002 14:01

Moin Roger,

wobei noch anzumerken wäre, dass man bei der Option /MIR sehr darauf aufpassen muss Quelle und Ziel nicht zu vertauschen.
Im Extremfall hat man sonst statt einer Sicherung einen 100%igen Datenverlust.

masters001 23. Dez 2002 18:50

Hallo!
Ich möchte diesen Befehl auch gerne in meinem Programm nutzen haber aber noch folgendes Problem:

CopyFile( Pfad ,'C:\save.dat',false);

In dem String Pfad ist der Pfad zu der Datei gespeichert die ich kopieren möchte!
Aber beim kompilieren kommt eine Fehlermeldung:
Incompatible type String and PChar!

Christian Seehase 23. Dez 2002 19:00

Moin Masters,

erst einmal herzlich willkommen.

Delphi-Quellcode:
CopyFile( PChar(Pfad) ,'C:\save.dat',false);
so sollte es gehen. Ich nehme mal an Pfad ist eine Variable vom Typ string.
Da als erster Parameter ein PChar (also eigentlich ein Pointer auf einen nullterminierten String) erwartet wird, muss man dem Compiler noch mitteilen, dass er den String als PChar verarbeiten soll.

masters001 23. Dez 2002 19:24

Vielen dank für die schnelle hilfe

napstar 19. Mär 2008 13:11

Re: Delphi Programm soll dateien kopieren
 
hi ich hab ein problem..
der compiler findet hier ein fehler.. ich weiß aber garnicht was ich machen soll ^^..
Delphi-Quellcode:
CopyFile(PChar(ExtractFilePath(ParamStr(0) + 'Programm.exe')),(ExtractFilePath(ParamStr(0) + 'Programm.bkp')),false);
das is die fehlermeldung:
[Pascal Fehler] Unit1.pas(219): E2010 Inkompatible Typen: 'string' und 'PAnsiChar'

hoffe jemand kann mir helfen
ich danke euch jetzt schonmal für eure hilfe ^^..

Aurelius 19. Mär 2008 13:50

Re: Delphi Programm soll dateien kopieren
 
Delphi-Quellcode:
CopyFile(PChar(ExtractFilePath(ParamStr(0) + 'Programm.exe')),PChar(ExtractFilePath(ParamStr(0) + 'Programm.bkp')),false);
Du hast das 2. PChar vergessen ;)

napstar 19. Mär 2008 13:53

Re: Delphi Programm soll dateien kopieren
 
hab ich doch???
oder kommt da noch ein pchar ^^

Aurelius 19. Mär 2008 13:54

Re: Delphi Programm soll dateien kopieren
 
Ja, da kommen 2 hin (Ursprungsdatei, Ziel).

napstar 19. Mär 2008 14:25

Re: Delphi Programm soll dateien kopieren
 
ich hab doch schon 2 drinstehen :?: :?: :?: :?: :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr.
Seite 2 von 3     12 3      

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