![]() |
CopyFile to Freigabe
Hallo,
Ich möchte gerne eine Datei von einem Rechner zu einem anderen (Netzwerkfreigabe) kopieren. Die Freigaben existieren und das Netzwerk ist auch ok, es kommt aber immer nur eine 0 byte große Datei an :gruebel: [delphi] //in slIPs befindet sich die IP-Adresse des Rechners wo die Freigabe (tto) ist if OpenDialog1.Execute then begin CopyFile(PChar(OpenDialog1.Filename), PChar('\\' + slIPs.Strings[0] + '\tto\' + ExtractFileName(OpenDialog1.Filename)), true); end; vielleicht könnt ihr ja helfen :gruebel: |
Re: CopyFile to Freigabe
Lass Dir doch einmal eine Fehlermeldung ausgeben.
Delphi-Quellcode:
if not CopyFile(...) then
ShowMessage(SysErrorMessage(GetLastError)); |
Re: CopyFile to Freigabe
Fehlermeldung: Netzwerkpfad wurde nicht gefunden :gruebel:
aber die IP und Freigabe stimmen :gruebel: |
Re: CopyFile to Freigabe
Ich habe das gerade hier einmal versucht und kann das nicht nachvollziehen. Klappt einwandfrei. Hast Du die Zieldatei auch vorher gelöscht?
|
Re: CopyFile to Freigabe
auch wenn sich noch keine Datei in der Freigabe befindet kopiertz er nicht es kommt die Fehlermeldung, Netzwerkpfad nicht gefunden und es wird eine leere Datei in der Freigabe abgelegt
|
Re: CopyFile to Freigabe
Nur zur Sicherheit: über den Windows-Explorer lässt sich die Datei einwandfrei kopieren?
|
Re: CopyFile to Freigabe
ja das ist ja der witz, keine Ahnung woran es liegt :gruebel:
|
Re: CopyFile to Freigabe
Tut mir leid, im Moment sind mir auch die Ideen ausgegangen :gruebel:
|
Re: CopyFile to Freigabe
macht doch nix, trotzdem danke für deine Hilfe
|
Re: CopyFile to Freigabe
Lass dir mal den Pfad ausgeben, den du dir da zusammen bastelst, der muss ja irgendwie falsch sein.
|
Re: CopyFile to Freigabe
Jepp, vielleicht steht ja ein Leerzeichen hinter der IP oder etwas in der Art.
|
Re: CopyFile to Freigabe
Ja in der Tat, hinter dem IP Eintrag war ein Leerzeichen somit war der Netzwerkpfad falsch, Problem behoben :-D ich DUSSEL
ABER, ABER ein neues Problem ist aufgetaucht. Ich setze auf Rechner A die Freigabe mit meinem Client, dazu verwende ich folgenen Code hier aus dem Forum.
Delphi-Quellcode:
const
SType_DiskTree = 0; Access_Read = 1; Access_All = 127; Nerr_Success = 0; type TShareInfo2ExW = record shi2_NetName: PWideChar; shi2_Type: Longword; shi2_Remark: PWideChar; shi2_Permissions: Longword; shi2_Max_Uses: Longword; shi2_Current_Uses: Longword; shi2_Path: PWideChar; shi2_Passwd: PWideChar; end; type NET_API_STATUS = DWORD; TShareInfo2ExA= record shi2_NetName: PAnsiChar; shi2_Type: Longword; shi2_Remark: PAnsiChar; shi2_Permissions: Longword; shi2_Max_Uses: Longword; shi2_Current_Uses: Longword; shi2_Path: PAnsiChar; shi2_Passwd: PAnsiChar; end; type TNetShareAddFunc = function (servername: PChar; level: Longword; const buf: Pointer; parm_err: PLongWord): LongWord; stdcall; function NetShareDel( const servername : LPWSTR; const netname : LPWSTR; const reserved : DWORD) : NET_API_STATUS; stdcall; external 'netapi32.dll'; function ShareDirA(const ADir, AName, APassword: string; ReadOnly: Boolean): Boolean; var Info: TShareInfo2ExA; Err: Longword; Lib: THandle; NetShareAddFunc: TNetShareAddFunc; begin Result:=False; Lib:= LoadLibrary('Svrapi.dll'); if Lib <> 0 then begin try @NetShareAddFunc:= GetProcAddress(Lib,'NetShareAdd'); if @NetShareAddFunc <> nil then begin FillChar(Info, SizeOf(Info), 0); Info.shi2_netname := PAnsiChar(AName); Info.shi2_type := SType_DiskTree; Info.shi2_remark := nil; if ReadOnly then Info.shi2_permissions := Access_Read else Info.shi2_permissions := Access_All; Info.shi2_max_uses := LongWord(-1); Info.shi2_current_uses := 0; Info.shi2_path := PAnsiChar(ADir); Info.shi2_passwd := PAnsiChar(APassword); Result := NetShareAddFunc(nil, 2, @Info, @Err) = NERR_SUCCESS; end else RaiseLastOSError; finally FreeLibrary(Lib); end; end; end; function ShareDirW(const ADir, AName, APassword: WideString; ReadOnly: Boolean): Boolean; var Info: TShareInfo2ExW; Err: Longword; Lib: THandle; NetShareAddFunc: TNetShareAddFunc; begin Result:=False; Lib:= LoadLibrary('Netapi32.dll'); if Lib <> 0 then begin try @NetShareAddFunc:= GetProcAddress(Lib,'NetShareAdd'); if @NetShareAddFunc <> nil then begin FillChar(Info, SizeOf(Info), 0); Info.shi2_netname := PWideChar(AName); Info.shi2_type := SType_DiskTree; Info.shi2_remark := nil; if ReadOnly then Info.shi2_permissions := Access_Read else Info.shi2_permissions := Access_All; Info.shi2_max_uses := LongWord(-1); Info.shi2_current_uses := 0; Info.shi2_path := PWideChar(ADir); Info.shi2_passwd := PWideChar(APassword); Result := NetShareAddFunc(nil, 2, @Info, @Err) = Nerr_Success; end else RaiseLastOSError; finally FreeLibrary(Lib); end; end; end; function ShareDir(const ADir, AName, APassword: WideString; ReadOnly: Boolean): Boolean; begin if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then Result := ShareDirA(ADir, AName, APassword, ReadOnly) else Result := ShareDirW(ADir, AName, APassword, ReadOnly); end; //Client-Verzeichnis freigeben procedure Tfrm_main.FormCreate(Sender: TObject); var sPfad:String; begin sPfad := ExtractFileDir(Application.ExeName); try ShareDir(sPfad, 'Testfreigabe', '', True); except // end; soweit alles ok, möchte ich aber von Rechner B eine Datei in das freigegebene Verzeichnis von Rechner A kopieren kommt immer die Fehlermeldung "kein Zugriff" obwohl die Freigabe gesetzt und ok ist.
Delphi-Quellcode:
Das komische dabei, mach ich die Freigabe über Windows per Hand funktioniert auch das anschließende kopieren in das Verzeichnis.
if not CopyFile(PChar(OpenDialog1.Filename), PChar('\\' + slIps.Strings[0] + '\Testfreigabe\' + ExtractFileName(OpenDialog1.Filename)), true) then
ShowMessage(SysErrorMessage(GetLastError)); :gruebel: :gruebel: :gruebel: |
Re: CopyFile to Freigabe
Du hast ja auch ReadOnly auf true gesetzt.
|
Re: CopyFile to Freigabe
:gruebel: Auch wenn ich
RedOnly auf false setze
Delphi-Quellcode:
ShareDir(sPfad, 'Testfreigabe', '', false);
kommt die Fehlermeldung kein Zugriff. Mach ich aber die Netzwerkfreigabe per Hand also Harken setzen bei ""Ordner im Netzwerk freigeben" und "Netzwerkbenutzer dürfen Dateien verändern" funktioniert das kopieren ohne Probleme. :gruebel: :gruebel: |
Re: CopyFile to Freigabe
Warum willst Du denn zwanghaft über ne Freigabe gehen um die Datei zu kopieren?
Nimm doch den kompletten UNC-Pfad und dann haste solche Probleme gar nicht erst. Oder ist diese Alternative nicht möglich? |
Re: CopyFile to Freigabe
Zitat:
Die Freigaben werden vom Client Individuell gesetzt dann dem Server mitgeteilt und vom Server aus dann die Datei in die entsprechende Freigabe kopiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz