Delphi-PRAXiS
Seite 1 von 2  1 2      

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr.
Seite 1 von 2  1 2      

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