Entwickler-Ecke
Dateizugriff - Datei im Netzwerk kopieren unter D3P
Nogo - Do 01.02.07 11:07
Titel: Datei im Netzwerk kopieren unter D3P
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?
Delete - Do 01.02.07 11:13
Hast du denn Schreibzugriff auf das Netzlaufwerk?
Nogo - Do 01.02.07 11:26
Die gleiche Operation mit dem Explorer funktioniert.
Ich habe alle Rechte auf diesem Laufwerk/Ordner.
Delete - Do 01.02.07 11:32
Und was macht die API-Funktion CopyFile?
Nogo - Do 01.02.07 12: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
Delete - Do 01.02.07 13:01
Woher weißt du, dass sie keinen Fehler zurückgibt? Zeig mal den Code.
Nogo - Do 01.02.07 13: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
Delete - Do 01.02.07 13:52
Geht wunderbar:
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:
| 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 - Do 01.02.07 14: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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!