AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Shell-Funktion zum Kopieren hat einen Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

Shell-Funktion zum Kopieren hat einen Fehler

Ein Thema von moperswings · begonnen am 30. Mai 2007 · letzter Beitrag vom 31. Mai 2007
Antwort Antwort
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#1

Shell-Funktion zum Kopieren hat einen Fehler

  Alt 30. Mai 2007, 15:13
Hallo,

ich habe dieses Beispiel-Programm um Dateien zu kopieren.
Das Kopieren funktioniert aber nur einmal, bei jedem weiteren Versuch kommt immer diese Fehlermeldung:
Datei kann nicht kopiert werden: Die QuellDatei oder vom Quelldatenträger kann nicht gelesen werden. Weiss jemand, wo da der Fehler ist und kann mir helfen?
Delphi-Quellcode:
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;
Viele Grüsse, moperswings
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 30. Mai 2007, 18:47
Hallo,

Zitat von moperswings:
Das Kopieren funktioniert aber nur einmal
Dann war das aktuelle Verzeichnis zufälligerweise auch das Quellverzeichnis für die Kopieraktion. Die FileListBox enthält nur die Dateinamen, den Pfad mußt du noch ergänzen:

Delphi-Quellcode:
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;
[...]
Die lokale Typdefinition TSHFILEOPSTRUCTA solltest du entfernen. Sie wird nicht benötigt und sie ist zudem falsch (fehlendes Feld pTo und fehlendes PACKED).

Gruß Hawkeye
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#3

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 31. Mai 2007, 08:10
Vielen Dank Hawkeye,

jetzt funktionierts!

Mit bestem Gruss

moperswings
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#4

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 31. Mai 2007, 08:18
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:
  Wfunc: uint;
  pfrom: pansichar;
  flags: fileop_flags;
  fanyoperationsaborted: bool;
  hnamemappings: pointer;
  lpszprogresstitle: pansichar;
brauche ich nicht mehr zu deklarieren! Warum?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 31. Mai 2007, 08:43
Du hast doch ShellAPI eingebunden, da steht alles drin
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#6

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 31. Mai 2007, 09:11
Aber nicht die ShellInfo!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 31. Mai 2007, 09:21
Auszug aus der ShellAPI.pas (Delphi 5):
Delphi-Quellcode:
TSHFileOpStructA = _SHFILEOPSTRUCTA;
TSHFileOpStructW = _SHFILEOPSTRUCTW;
TSHFileOpStruct = TSHFileOpStructA;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#8

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 31. Mai 2007, 09:35
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?
var shellinfo : TSHFILEOPSTRUCT ;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 31. Mai 2007, 09:42
Du sollst nicht die Variablendeklaration entfernen, sondern die Typdeklaration.
Delphi-Quellcode:
type
TSHFILEOPSTRUCTA = record
        Wnd: HWND;
        Wfunc: uint;
        pfrom: pansichar;
        flags: fileop_flags;
        fanyoperationsaborted: bool;
        hnamemappings: pointer;
        lpszprogresstitle: pansichar;
end;
Überflüssig, da bereits in ShellAPI vorhanden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
moperswings

Registriert seit: 27. Mai 2004
Ort: Bad Sooden-Allendorf
240 Beiträge
 
Delphi 6 Professional
 
#10

Re: Shell-Funktion zum Kopieren hat einen Fehler

  Alt 31. Mai 2007, 10:04
Ah, Sorry - das habe ich natürlich schon gemacht!
Ich weiss es halt nicht besser ... :wall:

Vielen Dank und viele Grüsse, moperswings
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz