Autor |
Beitrag |
Nogo
Hält's aus hier
Beiträge: 11
WIN 2000, WIN XP
D3 Prof D6 Pers
|
Verfasst: Do 01.02.07 12:07
Ich möchte eine Datei von einem lokalen Laufwerk in ein Netzlaufwerk kopieren.
Dabei habe ich unterschiedliche Ansätze probiert:
CopyFile aus den Delphi-eigenen Unit FMXUtils
CopyFile aus den RX-Tools 2.75
CopyFile mit BlockRead und Blockwrite
CopyFile mit MemoryStream
Lesen des lokalen Laufwerkes geht, schreiben geht aber nur auf einem lokalen Laufwerk, im Netzwerk geht es nicht. Dabei ist es egal, ob mit UNC-Pfad oder gemappten Laufwerk.
Dabei wird jedesmal der Fehler "... kann nicht erstellt werden" erzeugt (SFCreateError)
Kann Delphi 3 nicht mit Netzlaufwerken umgehen (sieht ja so aus) und wie kann ich das umgehen?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 01.02.07 12:13
Hast du denn Schreibzugriff auf das Netzlaufwerk?
|
|
Nogo 
Hält's aus hier
Beiträge: 11
WIN 2000, WIN XP
D3 Prof D6 Pers
|
Verfasst: Do 01.02.07 12:26
Die gleiche Operation mit dem Explorer funktioniert.
Ich habe alle Rechte auf diesem Laufwerk/Ordner.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 01.02.07 12:32
Und was macht die API-Funktion CopyFile?
|
|
Nogo 
Hält's aus hier
Beiträge: 11
WIN 2000, WIN XP
D3 Prof D6 Pers
|
Verfasst: Do 01.02.07 13:54
Die API Funktion macht bei lokalen Verzeichnissen das was Sie soll, bei Kopie ins Netzwerk meldet sie keine Fehler, kopiert aber nichts.
Grüße
Nogo
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 01.02.07 14:01
Woher weißt du, dass sie keinen Fehler zurückgibt? Zeig mal den Code.
|
|
Nogo 
Hält's aus hier
Beiträge: 11
WIN 2000, WIN XP
D3 Prof D6 Pers
|
Verfasst: Do 01.02.07 14:16
Es kommt keine Fehlermeldung, der Fehlercode ist 0. (Ich habe einen andere Fehler provoziert, hier wurde der Code ausgegeben.)
Folgende Funtion verwende ich (Von Delphi-Praxis mit Dank entnommen):
Zitat: | 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:
| 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 pTo := nil; end; fFlags := Flags; end; Result := SHFileOperationA(SHFileOpStruct); end; | |
Aufgerufen mit:
Delphi-Quelltext 1:
| messagedlg(inttostr(doFileWork(FO_COPY, 'D:\Programme\aquinto\Archive\data\images\Original\2007010003\0701A00351.JPG', '\\wzcp24\d\temp\etst.jpg', FOF_ALLOWUNDO )), mtInformation, [mbOk], 0); |
Grüße
Nogo
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 01.02.07 14:52
Geht wunderbar:
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:
| uses ShellAPI;
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 pTo := nil; end; fFlags := Flags; end; Result := SHFileOperationA(SHFileOpStruct); end;
procedure TForm1.Button1Click(Sender: TObject); var res: Integer; begin res := DoFileWork(FO_COPY, 'd:\Test.pdf', '\\Nestor\~ressourcen', 0); if res <> 0 then ShowMessage(SysErrorMessage(GetLastError)); end; |
|
|
Nogo 
Hält's aus hier
Beiträge: 11
WIN 2000, WIN XP
D3 Prof D6 Pers
|
Verfasst: Do 01.02.07 15:07
DANKE!
Da hab ich vergessen, daß ich vor einem Jahr mein Delphi so eingerichtet habe, daß es als lokaler Admin startet und somit keine Netzwerkrechte hat, das gilt natürlich auch für alle Programme die aus der IDE gestartet werden.
Komischerweise gibt (neben allen meinen Versuchen) auch Dein Quelltext keine Fehlernummer heraus. Das ist mir unverständlich, aber egal, Problem gelöst, vielen Dank.
Grüße
Nogo
|
|