Entwickler-Ecke

Windows API - Kopieren mit SHFILEOPERATION bringt Fehler


Wayan - So 29.05.05 21:30
Titel: Kopieren mit SHFILEOPERATION bringt Fehler
Hallo ihr lieben!

Bin neu hier und hab gleich ne Frage...

Ich möchte ein Sicherungsprogramm schreiben welches bestimmte Ordner in einen anderen kopiert. Dazu wird ein Ordner im Format Laufwerk:\DDMMYYYY\ erzeugt und in diesen sollen die Verzeichnisse kopiert werden. ich hab mir dazu mehrere Beispiele angesehen und daran eine eigene Kopier-funktion gebastelt. Wird diese allerdings ausgeführt, kommt eine Fehlermeldung mit der ich nicht wirklich viel anfangen kann.

Zitat:
Zugriffsverletzung bei Adresse 77E5A918 in Modul 'kernel32.dll'. Lesen von Adresse 000D0000.

Hier meine Kopier-Funktion

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
function Kopieren(
  aWnd: HWND; aOperation: UINT; aFrom:Tstrings; aTo: String; 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;

die überprüfung ob ein zielverzeichnis vorhanden ist habe ich rauskommentiert, da immer eins vorhanden ist

so sieht die Verzeichnisliste aus


Delphi-Quelltext
1:
2:
3:
4:
5:
{-----------------Liste der zu kopierenden verzeichnisse-------}
verzeichnisliste:=Tstringlist.create;
verzeichnisliste.add('C:\test\');
verzeichnisliste.add('C:\test2\');
{--------------------------------------------------------------}

und so wird die funktion aufgerufen....


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
begin
                      CreateDir (edit1.text);           {erstellt das verzeichnis aus M D und Y}
                      sicherungsverzeichnis:=edit1.text;
                      if Kopieren(self.handle,FO_COPY,verzeichnisliste,sicherungsverzeichnis,FOF_ALLOWUNDO) = 0
                        then
                          ShowMessage('Sicherung erfolgreich!')
                        else
                          Showmessage('Kopieren nicht möglich!');
                    end;


ich kann den Fehler nicht finden..... vielleich bin ich auch nur zu blöd.
Ich wünsch euch noch einen schönen Abend, und vielleich kann mir ja jemand helfen.

:cry:

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Überflüssige Zeilenumbrüche entfernt.


Delete - So 29.05.05 22:44

Du hast nicht die Prüfung auskommentiert, ob das Ziel vorhanden ist, sondern du hast das Ziel auskommentiert. Die Dateien sollen ja irgendwo hin kopiert werden. Richtig? ;) Denk mal darüber nach.


Wayan - Mo 30.05.05 19:31

:idea: :idea: :idea: :idea:

Danke.... Das konnte ich dann wohl sogar nachvollziehen *g*

naja, es war spät... :D

Jetzt hab ich das Ziel wieder drin.... bekomme allerdings jetzt die Fehlermeldung das vom angegebenen zielverzeichnis oder Datenträger nicht gelesen werden kann

...seufz