Autor Beitrag
Nogo
Hält's aus hier
Beiträge: 11

WIN 2000, WIN XP
D3 Prof D6 Pers
BeitragVerfasst: 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



BeitragVerfasst: Do 01.02.07 12:13 
Hast du denn Schreibzugriff auf das Netzlaufwerk?
Nogo Threadstarter
Hält's aus hier
Beiträge: 11

WIN 2000, WIN XP
D3 Prof D6 Pers
BeitragVerfasst: 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



BeitragVerfasst: Do 01.02.07 12:32 
Und was macht die API-Funktion CopyFile?
Nogo Threadstarter
Hält's aus hier
Beiträge: 11

WIN 2000, WIN XP
D3 Prof D6 Pers
BeitragVerfasst: 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



BeitragVerfasst: Do 01.02.07 14:01 
Woher weißt du, dass sie keinen Fehler zurückgibt? Zeig mal den Code.
Nogo Threadstarter
Hält's aus hier
Beiträge: 11

WIN 2000, WIN XP
D3 Prof D6 Pers
BeitragVerfasst: 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:
ausblenden 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 // target available
      pTo := nil;
    end// target not available
    fFlags := Flags;
  end// structure
  Result := SHFileOperationA(SHFileOpStruct);
end;


Aufgerufen mit:

ausblenden 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



BeitragVerfasst: Do 01.02.07 14:52 
Geht wunderbar:
ausblenden volle Höhe 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 // target available
      pTo := nil;
    end// target not available
    fFlags := Flags;
  end// structure
  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 Threadstarter
Hält's aus hier
Beiträge: 11

WIN 2000, WIN XP
D3 Prof D6 Pers
BeitragVerfasst: 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