Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Netzlaufwerk verbunden, aber nicht bereit (https://www.delphipraxis.net/134582-netzlaufwerk-verbunden-aber-nicht-bereit.html)

paritycheck 25. Mai 2009 14:14

Re: Netzlaufwerk verbunden, aber nicht bereit
 
Zitat:

Zitat von berens
Beispiel (\\pc1\frei\1.txt existiert!):

Wenn obiges funtioniert würde ich als Workaround versuchen das Laufwerk in seinen Netzwerkpfad aufzulösen.

Delphi-Quellcode:
function GetNetworkDriveUNC(Driveletter: string): String;
var
  len: cardinal;
  buff: PChar;
begin
  len:= 0;
  if WNetGetConnection(PChar(Driveletter), Buff, len) = ERROR_MORE_DATA then begin
     GetMem(buff, len);
     if WNetGetConnection(PChar(Driveletter), Buff, len) = NO_ERROR then begin
        SetString(Result, buff, len);
     end;
     FreeMem(buff);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(getnetworkdriveunc('z:'));
end;
Ansonsten bin ich grade auch mit meinem Latein am Ende :pale:

berens 25. Mai 2009 14:23

Re: Netzlaufwerk verbunden, aber nicht bereit
 
Das ist auf jeden Fall einen Versuch wert...

HeikoAdams 29. Jul 2009 13:38

Re: Netzlaufwerk verbunden, aber nicht bereit
 
Ich würde für die Funktion eher folgenden Code verwenden:
Delphi-Quellcode:
function GetNetworkDriveUNC(const aDriveletter: string): String;
var
  nLen: cardinal;
  sBuff: PChar;
  nResult: DWORD;
begin
  nLen := 0;
  ZeroMemory(@sBuff, SizeOf(PChar));
  nResult := WNetGetConnection(PChar(aDriveletter), sBuff, nLen);

  if (nResult = ERROR_MORE_DATA) then
  begin
     GetMem(sBuff, nLen);
     nResult := WNetGetConnection(PChar(aDriveletter), sBuff, nLen);

     if (nResult = NO_ERROR) or (nResult = ERROR_CONNECTION_UNAVAIL) then
     begin
        SetString(Result, sBuff, nLen);
        Delete(Result, Pos(#0, Result), 1);
     end;
     
     FreeMem(sBuff);
  end;
end;
Der Code hat im wesentlichen zwei Vorteile:
1. Wenn ein Laufwerk zwar gemapt, aber nicht bereit ist, wird trotzdem der UNC-Pfad ermittelt.
2. Der überflüssige #0 wird nicht zurück gegeben.

delnu 12. Nov 2015 00:13

AW: Netzlaufwerk verbunden, aber nicht bereit
 
Das Thema ist zwar schon etwas älter, aber die Beispiele in den Beiträgen #11 und #13 haben einen gewaltigen Fehler.

Wenn z.B. in einer Schleife alle Laufwerksbuchstaben von A bis Z auf diese Weise abgefragt werden, gibt es bei Laufwerksbuchstaben, denen kein Netzlaufwerkspfad zugewiesen wurde, dauernd Wiederholungen des letzten gültigen Eintrags.

Warum ? Weil die beiden Autoren vergessen haben, für den Fall, daß einem Buchstaben kein Netzlaufwerk zugewiesen wurde, als Ergebnis einen Leerstring zurückzuliefern.

Ein einfaches result:=''; gleich hinter "Len := 0;" bzw. "nLen := 0;" behebt den Fehler. Übrigens habe ich keinen Vorteil des längeren Beispiels feststellen können. Es ist lediglich aufgebläht.:shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.
Seite 2 von 2     12   

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