Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FileListBox + FO_COPY (https://www.delphipraxis.net/16871-filelistbox-fo_copy.html)

TheMiller 24. Feb 2004 19:23


FileListBox + FO_COPY
 
Hi,

habe aus der DL den Code zum Kopieren von Daten mittels SHFileOperation.

Habe links eine FileListBox und rechts eine DirectoryListBox und ich möchte die Daten von FileListBox in DirectoryListBox kopieren. Hatte folgenden Code:

Delphi-Quellcode:
DOFileWork(FO_Copy,FileListBox1.FileName,DirectoryListbox2.Directory,FOF_RENAMEONCOLLISION);
Dieser Code kopiet aber nur eine Datei, obwohl ich MultiSelect in der ListBox aktiviert habe. Muss ich eine Schleife benutzen und wenn ja, wie sähe so eine aus?

TheMiller 24. Feb 2004 20:08

Re: FileListBox + FO_COPY
 
Ich habe diese function verwendet:

Delphi-Quellcode:
function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: AnsiString;
    Flags: FILEOP_FLAGS): Integer;
var
  FromPath, ToPath: AnsiString;
  SHFileOpStruct: TSHFileOpStruct;
begin
  FromPath := aFrom + #0#0;
  ToPath := aTo + #0#0;
  with SHFileOpStruct do
  begin
    Wnd := 0;
    wFunc := aOperation;
    pFrom := PAnsiChar(FromPath);
    if ToPath <> '' then
    begin
      pTo := PAnsiChar(ToPath)
    end else begin // target available
      pTo := nil;
    end; // target not available
    fFlags := Flags;
  end; // structure
  Result := SHFileOperationA(SHFileOpStruct);
end;
Danke im Vorraus

himitsu 24. Feb 2004 20:12

Re: FileListBox + FO_COPY
 
Ist schon richtig so, dass nur eine Datei kopiert wird,

denn FileListBox1.FileName enhält nur den Dateinamen der zuletzt markierten Datei.

Schau dir mal das an:
Delphi-Quellcode:
FileListBox1.Items.Count
FileListBox1.Items.Strings[i]
FileListBox1.Selected[i]

Damit
Delphi-Quellcode:
For i := 0 to FileListBox1.Items.Count - 1 do
  If FileListBox1.Selected[i] Then
    DOFileWork(FO_Copy, FileListBox1.Items.Strings[i], DirectoryListbox2.Directory, FOF_RENAMEONCOLLISION);

[add]
mit der Anderen, auf StringList basierenden Version, hättest du alle Dateien verarbeitet und nicht nur die markierten, wenn du nur FileListBox1.Items übergeben hättest.

TheMiller 24. Feb 2004 20:25

Re: FileListBox + FO_COPY
 
Ok, danke,

aber wenn ich diesen Code benutze und eine, oder mehrere Daten kopieren will, dann sagt er mir:

Delphi-Quellcode:
Datei kann nicht kopiert werden. Die Quelldatei oder vom Datenträger kann nicht gelesen werden
wieso das? Die schleife verstehe ich übrigens ;-)

TheMiller 24. Feb 2004 20:54

Re: FileListBox + FO_COPY
 
Kann es sein, dass an dieser Stelle der Quelltext falsch ist? WEnn ja, warum? Sieht eigentlich logisch aus

TheMiller 24. Feb 2004 22:35

Re: FileListBox + FO_COPY
 
kann mir keiner Helfen? Bitte!!

himitsu 24. Feb 2004 22:51

Re: FileListBox + FO_COPY
 
Das Verzeichnis der zu verarbeitenden Datei muß natürlich auch noch rein.

FileListBox1.FileName gibt die Datei samt Verzeichnis zurück,
abar FileListBox1.Items.Strings[i] gibt nur die Dateinamen zurück.

Code:
For i := 0 to FileListBox1.Items.Count - 1 do
  If FileListBox1.Selected[i] Then
    DOFileWork(FO_Copy, [color=red]FileListBox1.Directory + '\' + [/color]FileListBox1.Items.Strings[i], DirectoryListbox2.Directory, FOF_RENAMEONCOLLISION);


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