![]() |
Probleme mit SHFileOperationA
Hallo,
ich habe eine Funktion zum Kopieren, Verschieben, etc von Dateien und Verzeichnissen gefunden und in ein eigenes Programm integriert.
Delphi-Quellcode:
In einem Formular sind jeweils zwei Drive-Comboboxen, zwei Directory-Listboxen und zwei Filelistboxen jeweils als Quelle und Ziel angelegt. Nach Auswahl einer Quelldatei und einem Zielordner wird per Button die obige Funktion aufgerufen. Dies klappt auch wunderbar bei dem ersten Kopiervorgang. Wenn ich eine zweiten Kopiervorgang (aus selbem Quellordner in selben Zielordner) starten möchte erhhalte ich eine Fehlermeldung:
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; Datei kann nicht kopiert werden. Die Quelldatei oder vom Quelldatenträger kann nicht gelsen werden. Wechsel ich zwischen zwei Kopiervorgängen Quelllaufwerk oder Quellordner klappt es wieder - aber nur einmal. Dies ist Behandlungsroutine für den Kopierbutton
Delphi-Quellcode:
Wer kann mir helfen
procedure TForm1.Button1Click(Sender: TObject);
{***************************************************************************************} var i : integer; files : string; begin files := ''; for i := 0 to filelistbox1.Items.Count - 1 do if filelistbox1.Selected [i] then files := files + filelistbox1.Items [i]; DoFileWork(FO_COPY, files, directorylistbox2.Directory, FOF_NOCONFIRMATION); filelistbox1.update; filelistbox2.update; end; Günther Käberich [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] [edit=Christian Seehase]Delph-Tags ergänzt. Mfg, Christian Seehase[/edit] |
Re: Probleme mit SHFileOperationA
Moin Günther,
die einzelnen Dateien in der Liste müssen mit #00 getrennt werden. Statt:
Delphi-Quellcode:
solltest Du
files := files + filelistbox1.Items [i];
Delphi-Quellcode:
schreiben.
files := files + filelistbox1.Items [i]+#00;
|
Re: Probleme mit SHFileOperationA
Hallo,
das Anfügen von #0 passiert doch in der Funktion, die zum Kopieren aufgerufen wird. Günther |
Re: Probleme mit SHFileOperationA
Moin Günther,
nein, das +#00#00 dient dazu die Liste abzuschliessen. SHFileOperation benutzt #00 um einzelne Dateien voneinander zu trennen, und #00#00 um das Ende der Liste zu erkennen. |
Re: Probleme mit SHFileOperationA
Hallo Christian,
der Effekt ist geblieben - erst nach einem Verzeichniswechsel kann ich einmal kopieren. Günther |
Re: Probleme mit SHFileOperationA
Moin Günther,
ich glaube jetzt hab' ich's: Du übergibst der Funktion nur die Dateinamen, aber ohne Pfad. Woher soll die Funktion denn wissen, wo die Quelldateien stehen? ;-) Wenn Du die Variable files zusammenbaust, musst Du je Datei noch den Quellpfad davorschreiben. |
Re: Probleme mit SHFileOperationA
Zitat:
Code:
file1#0file2#0file3#0#0
|
Re: Probleme mit SHFileOperationA
Moin Michael,
sag' ich doch, nur: Ich schreibe #00, wo Du #0 schreibst. Es ist aber immer nur ein Zeichen. ;-) |
Re: Probleme mit SHFileOperationA
Hallo,
klappt super. Danke Günther Käberich |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 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