![]() |
Re: Netzlaufwerk verbunden, aber nicht bereit
Zitat:
Delphi-Quellcode:
Ansonsten bin ich grade auch mit meinem Latein am Ende :pale:
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; |
Re: Netzlaufwerk verbunden, aber nicht bereit
Das ist auf jeden Fall einen Versuch wert...
|
Re: Netzlaufwerk verbunden, aber nicht bereit
Ich würde für die Funktion eher folgenden Code verwenden:
Delphi-Quellcode:
Der Code hat im wesentlichen zwei Vorteile:
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; 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. |
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. |
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