Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dateien aus Listbox nach beliebiges Verzeichnis kopieren? (https://www.delphipraxis.net/59915-dateien-aus-listbox-nach-beliebiges-verzeichnis-kopieren.html)

mlspider 30. Dez 2005 14:04


Dateien aus Listbox nach beliebiges Verzeichnis kopieren?
 
Ich möchte alle in einer Listbox vorhandenen Dateien in ein beliebiges Verzeichnis kopieren. Ich nutzte den Code von sakura:

Delphi-Quellcode:
function DoFileWork(
  aWnd: HWND; aOperation: UINT; aFrom, aTo: TStrings; aFlags: FILEOP_FLAGS
  ): Integer;
var
  I: Integer;
  FromPath, ToPath: string;
  SHFileOpStruct: TSHFileOpStruct;
begin
  FromPath := '';
  for I := 0 to aFrom.Count - 1 do
    FromPath := FromPath + aFrom.Strings[I] + #0;
  FromPath := FromPath + #0;

  if Assigned(aTo) then
  begin
    ToPath := '';
    for I := 0 to aTo.Count - 1 do
      ToPath := ToPath + aTo.Strings[I] + #0;
    ToPath := ToPath + #0;
    if aTo.Count > 0 then
      aFlags := aFlags or FOF_MULTIDESTFILES;
  end;

  with SHFileOpStruct do
  begin
    Wnd := aWnd;
    wFunc := aOperation;
    pFrom := PChar(FromPath);
    if Assigned(aTo) then
    begin
      pTo := PChar(ToPath)
    end else begin // target available
      pTo := nil;
    end; // target not available
    fFlags := aFlags;
  end; // structure
  Result := SHFileOperation(SHFileOpStruct);
end;
Der Aufruf:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var sl: TStringList;
begin
 sl := TStringList.Create;
 sl.AddStrings(ListBox2.Items);
 DoFileWork(Self.Handle, FO_COPY, sl);
end;
möchte einfach nicht funktionieren. Wo muß die genaue Pfadangabe vorgenommen werden?

tomsel 30. Dez 2005 14:23

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
DoFileWork kopiert halt nicht Dateien aus einer Liste in ein Verzeichnis, sondern wiederum in eine Liste von Verzeichnissen. Du brauchst also ein zweites tStrings-Objekt, welches mindestens dein Zielverzeichnis als einzigen Eintrag enthält. Außerdem gibst du keinen Parameter für aFlags an, darauf müsste dein Compiler dich schon hingewiesen haben.

mlspider 30. Dez 2005 14:26

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Das ist wahr. Der Compiler ist sehr unzufrieden. Also wenn ich es recht verstehe, müsste ich eine 2. Stringliste erzeugen, die wiederum den Pfad enthält. Und wie würde der Aufruf dann aussehen?

tomsel 30. Dez 2005 14:32

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Delphi-Quellcode:
  DoFileWork(Self.Handle, FO_COPY, slQelldateien, slZielpfad, IrgendWelcheFlags)
Welche Werte FILEOP_FLAGS beinhaltet, weis ich nicht.

JWeis 30. Dez 2005 14:33

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
stehen in der listbox die aktuellen pfade der dteien drin oder versteh ich dich falsch

mlspider 30. Dez 2005 14:35

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
In deer ListBox1 stehen die zu kopierenden Dateien samt Pfad drin. In ListBox2 lediglich der Zielpfad (C:\Blablabla\).

Ich habe den Aufruf insoweit abgeändert:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var sl, dl: TStringList;
begin
 sl := TStringList.Create;
 dl := TStringList.Create;
 sl.AddStrings(ListBox2.Items);
 dl.AddStrings(ListBox3.Items);
 DoFileWork(Self.Handle, FO_COPY, sl, dl, FOF_ALLOWUNDO);
 sl.Free;
 dl.Free;
end;
Leider bisher ohne Erfolg.

tomsel 30. Dez 2005 14:39

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Dann müsste dies doch klappen:

Zitat:

DoFileWork(Self.Handle, FO_COPY, Listbox1.Items, Listbox2.Items, [])
Nur zu diesen Flags kann ich eben leider nix sagen.

JWeis 30. Dez 2005 14:39

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
ich hab da mal geschrieben aber mit nem memo anstatt ne listbox ich suchs und stell es online

so das ist alles
Delphi-Quellcode:
uses StrUtils
//_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_Kopieren:-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-

//Edit1 = der von pfad
//Edit2 = der nach pfad
//label2 = wieviele dateien copiert sind
//in memo setehen die dateien halt drin



//---Button-4----------------------------------------------------------------------------------
procedure TForm1.Button4Click ( Sender: TObject ) ;
var
  Datei: Integer;
begin
  if Edit2.Text <> '' then
  begin
    Progressbar1.Max:= Memo1.Lines.Count;
    for Datei:= 0 to Memo1.Lines.Count -1 do
    begin
      ForceDirectories ( Edit2.Text + '\' + AnsiReplaceStr ( ExtractFileDir ( Memo1.Lines
        [ Datei ] ) , Edit1.Text , '' ) ) ;
      CopyFile ( pchar ( Memo1.Lines [ Datei ] ) , pchar ( Edit2.Text + '\' +
        AnsiReplaceStr ( Memo1.Lines [ Datei ] , Edit1.Text,'' ) ) , true );
      Label2.Caption:= InttoStr ( Datei + 1 );
      Progressbar1.Position:= Datei + 1;
      Application.ProcessMessages;
      if Progressbar1.position = Progressbar1.max then
      begin
        ShowMessage('Alles wurde Kopiert!');
      end;
    end;
  end
  else
  begin
    Exit;
  end;
end;

mlspider 30. Dez 2005 14:41

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Das wäre Super. Danke.

tomsel 30. Dez 2005 14:41

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Wie äußert sich denn dieser Misserfolg?

Compilerfehler? AV? Was passiert denn genau?

mlspider 30. Dez 2005 14:45

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Der Compiler ist mit oben genannter Nachbesserung recht zufrieden. Es kann nunmehr der angegebene Pfad (Zielpfad) nicht gefunden werden.

tomsel 30. Dez 2005 14:49

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Dann würde ich den Zielpfad mal unter die Lupe nehmen. Entweder ist er nicht vorhanden (und wird auch von SHFileOperation nicht angelegt) oder er ist syntaktisch inkorrekt oder was auch immer.

JWeis 30. Dez 2005 15:11

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
kanste damit was anfangen??

mlspider 30. Dez 2005 15:15

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Eigentlich schon. Für was steht "Inte0001"? Außerdem findet der Compiler "+ AnsiReplaceStr" nicht so toll.

PS: Das mit der Fortschrittanzeige ist schon toll.

JWeis 30. Dez 2005 15:18

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Delphi-Quellcode:
inte0001:= Datei
hab das vorhin noch schnell umbenannt sry dachte hätte alle umgenannt

Delphi-Quellcode:
uses StrUtils
vergas ich dazuzuschreiben

mlspider 30. Dez 2005 15:35

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Der Compiler hat nichts mehr zu meckern. Allerdings wird immer noch nichts kopiert.

JWeis 30. Dez 2005 15:37

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
hast du irgendwas veränder??

wen ja poste mal kurz

JWeis 30. Dez 2005 15:40

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
so ich gib dir mal mein prog.
mach aber keinen scheiß mit



PS @ moderatoren ich wollte editiren

mlspider 30. Dez 2005 15:41

Re: Dateien aus Listbox nach beliebiges Verzeichnis kopieren
 
Versprochen. Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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