![]() |
Shell-Funktion zum Kopieren hat einen Fehler
Hallo,
ich habe dieses Beispiel-Programm um Dateien zu kopieren. Das Kopieren funktioniert aber nur einmal, bei jedem weiteren Versuch kommt immer diese Fehlermeldung:
Delphi-Quellcode:
Weiss jemand, wo da der Fehler ist und kann mir helfen?
Datei kann nicht kopiert werden: Die QuellDatei oder vom Quelldatenträger kann nicht gelesen werden.
Delphi-Quellcode:
Viele Grüsse, moperswings
uses shellapi;
{$R *.dfm} var shellinfo : TSHFILEOPSTRUCT ; type TSHFILEOPSTRUCTA = record Wnd: HWND; Wfunc: uint; pfrom: pansichar; flags: fileop_flags; fanyoperationsaborted: bool; hnamemappings: pointer; lpszprogresstitle: pansichar; end; 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] + #0; files := files + #0; fillchar(shellinfo, sizeof(shellinfo),0); with shellinfo do begin wnd := handle; wfunc := FO_COPY; pFrom := PCHAR(files); pTo := PChar(directoryListBox2.Directory); end; SHFileOperation(shellinfo); FileListBox1.Update; FileListBox2.Update; end; |
Re: Shell-Funktion zum Kopieren hat einen Fehler
Hallo,
Zitat:
Delphi-Quellcode:
Die lokale Typdefinition TSHFILEOPSTRUCTA solltest du entfernen. Sie wird nicht benötigt und sie ist zudem falsch (fehlendes Feld pTo und fehlendes PACKED).
var
path : string; files : string; i : Integer; begin path := IncludeTrailingPathDelimiter(FileListBox1.Directory); files := ''; for i := 0 to FileListBox1.Items.Count - 1 do if FileListBox1.Selected[i] then files := files + path + FileListbox1.Items[i] + #0; files := files + #0; [...] Gruß Hawkeye |
Re: Shell-Funktion zum Kopieren hat einen Fehler
Vielen Dank Hawkeye,
jetzt funktionierts! Mit bestem Gruss moperswings |
Re: Shell-Funktion zum Kopieren hat einen Fehler
NACHGEFRAGT:
1. Jetzt habe ich die TSHFILEOPSTRUCTA mal auskommentiert, aber was mache ich dann mit der ShellInfo, denn ohne die passiert nichts? 2. Die ganzen Variablen
Delphi-Quellcode:
brauche ich nicht mehr zu deklarieren! Warum?
Wfunc: uint;
pfrom: pansichar; flags: fileop_flags; fanyoperationsaborted: bool; hnamemappings: pointer; lpszprogresstitle: pansichar; |
Re: Shell-Funktion zum Kopieren hat einen Fehler
Du hast doch ShellAPI eingebunden, da steht alles drin :zwinker:
|
Re: Shell-Funktion zum Kopieren hat einen Fehler
Aber nicht die ShellInfo!
|
Re: Shell-Funktion zum Kopieren hat einen Fehler
Auszug aus der ShellAPI.pas (Delphi 5):
Delphi-Quellcode:
TSHFileOpStructA = _SHFILEOPSTRUCTA;
TSHFileOpStructW = _SHFILEOPSTRUCTW; TSHFileOpStruct = TSHFileOpStructA; |
Re: Shell-Funktion zum Kopieren hat einen Fehler
Vielen Dank ersteinmal, Deddy, dass Du versuchst, mir den Kram zu erklären!
Mir ist immer noch nicht klar, was ich mit der ShellInfo machen soll, wenn ich - nach Hawkeye - die TSHFILEOPSTRUCT entfernen soll?
Delphi-Quellcode:
var shellinfo : TSHFILEOPSTRUCT ;
|
Re: Shell-Funktion zum Kopieren hat einen Fehler
Du sollst nicht die Variablendeklaration entfernen, sondern die Typdeklaration.
Delphi-Quellcode:
Überflüssig, da bereits in ShellAPI vorhanden.
type
TSHFILEOPSTRUCTA = record Wnd: HWND; Wfunc: uint; pfrom: pansichar; flags: fileop_flags; fanyoperationsaborted: bool; hnamemappings: pointer; lpszprogresstitle: pansichar; end; |
Re: Shell-Funktion zum Kopieren hat einen Fehler
Ah, Sorry - das habe ich natürlich schon gemacht!
Ich weiss es halt nicht besser ... :wall: Vielen Dank und viele Grüsse, moperswings |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 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