![]() |
Delphi-Version: 5
DirectoryExists im Netzwerk will nicht wie ich
Hallo zusammen,
Ausgangssituation: ich habe eine VPN-Verbindung zu einem anderen PC und ein gemaptes Laufwerk. Mein Programm soll mittels DirectoryExists ('n:\blabla') herausfinden, ob das Verzeichnis auf dem Netzwerk-Laufwerk erreichbar ist. Das gibt aber nix, da DirectoryExists immer false zurückliefert. Rufe ich den Explorer auf, gehe auf das Laufwerk und in das gewünschte Verzeichnis hinein, und starte anschließend mein Programm, ist alles schön. Ich hab mich zwar schon durchgegooglt, und auch schon gefunden, daß ich nicht der einzige bin, aber kann mir vielleicht jemand sagen 1. warum das so ist und wie man 2. verhindern kann, daß man erst mit dem Explorer in das Verzeichnis gehen muß, damit das Programm funktioniert? Für Hilfe wäre ich echt dankbar. Herzlich grüßt Marco |
AW: DirectoryExists im Netzwerk will nicht wie ich
Delphi 5 Standard...naja...
![]() ...in XE2 ist die Funktion wesentlich umfangreicher. |
AW: DirectoryExists im Netzwerk will nicht wie ich
Der Windowsexplorer wird hier im Hintergrund einen Logon bzw. ein Connect auf ein im Moment nicht verbundenes LW durchführen. Diesen Connect müsstest du nachimplementieren.
|
AW: DirectoryExists im Netzwerk will nicht wie ich
Vielleicht auch mal nachschauen ob, bzw. welchen ErrorCode das DirectoryExists zurück gibt?
Eventuell erfährt man da mehr, warum es nichts findet. |
AW: DirectoryExists im Netzwerk will nicht wie ich
Wie Bernhard bereits schrieb, über den Windows Explorer erfolgt das Login automatisch. Ich habe auch eine Weile nach einer Lösung gesucht:
Delphi-Quellcode:
Vorher wird noch geprüft, ob es sich um ein Netzwerkverzeichnis handelt:
function ConnectToNetwork(NetPath: WideString): DWORD;
var NetResource: TNetResourceW; begin // Abschließendes "\" aus NetPath entfernen! if NetPath[Length(NetPath)] = '\' then Delete(NetPath, Length(NetPath), 1); ZeroMemory(@NetResource, SizeOf(TNetResource)); with NetResource do begin dwType := RESOURCETYPE_ANY; lpLocalName := nil; lpRemoteName := PWideChar(NetPath); lpProvider := nil; end; Result := WNetAddConnection2W(NetResource, nil, nil, CONNECT_INTERACTIVE); end;
Delphi-Quellcode:
Ich hoffe, ich konnte Dir weiterhelfen.
if Copy(DBPath, 1, 2) = '\\' then
begin if ConnectToNetwork(DBPath) <> 0 then // keine Verbindung zum Netzwerkordner ... end; roga |
AW: DirectoryExists im Netzwerk will nicht wie ich
Zitat:
Zitat:
Zitat:
So mancher Beitrag ...naja... ;-) |
AW: DirectoryExists im Netzwerk will nicht wie ich
Zitat:
In dem explizit verlinkten Beitrag des Themas wird die aktuellste Version von
Delphi-Quellcode:
gezeigt (aus Delphi XE2). Die arbeitet etwas zuverlässiger.
DirectoryExists
Allerdings wird diese Funktion alleine es nicht schaffen die Verbindung herzustellen genau wie die andere Funktion es nicht schaffen wird, denn es handelt sich ja um ein gemapptes Laufwerk und da bringt ein Test auf
Delphi-Quellcode:
am Anfang des Pfads irgendwie nichts.
'\\'
Es braucht dort noch ein wenig mehr |
AW: DirectoryExists im Netzwerk will nicht wie ich
Man müsste aber doch mit GetDriveType etc. herausfinden können, ob es sich um ein Netzlaufwerk handelt, dessen UNC-Pfad ermitteln und dann versuchen, sich zu verbinden, oder?
|
AW: DirectoryExists im Netzwerk will nicht wie ich
Zitat:
Aber davon abgesehen, gibt es zwei Arten von Netzlaufwerken? Ich kenne Sie nur als h:\...z:\ und die sind verfügbar oder gar nicht vorhanden. Das beschriebene Verhalten kenne ich nur von Diskettenlaufwerken (oder Wechselplatten). Gruß K-H |
AW: DirectoryExists im Netzwerk will nicht wie ich
Zitat:
"Im Moment ist dieser Pfad nicht existent" ... Ob er das wäre, nachdem man das Netzlaufwerk verbindet, ist eine andere Angelegenheit. :stupid: Wenn man direkt das Rootverzeichnis prüft, as kommt da denn bei raus? Wer kennt noch die Geschichte "Meister, wie kann ich prüfen, ob der Computer mit dem Internet verbunden ist?" ? |
AW: DirectoryExists im Netzwerk will nicht wie ich
Hallo zusammen,
kabbelt euch nicht ;-). also: mir war nicht klar, das der Explorer im Hintergrund ein implizites Logon macht - wenn man's weiß, ist es aber logisch. ;-) Und herzlichen Dank an Roga für den Code, auch wenn er bei mir im Moment nicht will, das ConnectToNetwork liefert mir, egal ob verbunden oder nicht, eine gleichbleibende und unerschütterliche "67" als Fehlercode zurück. Ich wird mal nachforschen, woran's liegt. Zumal das Programm, wenn man es von der Delphi_Ide aus startet, ohnehin steif und fest behauptet, der Pfad würde nicht existieren, startet man es ohne die Ide, ist der Pfad plötzlich da ... aber das mag auch dem guten alten D5 geschuldet sein. Übrigens: 1. ist D5 das bis jetzt am besten mit Screenreader bedienbare (sonst hätte ich längst ein Xe) und 2. hab ich im Moment schlicht die Kohle nicht für eine neue Version - oder ich hab eine Version übersehen, die weniger als 800 Euro kostet. Herzlichen Dank erstmal und viele Grüße Marco |
AW: DirectoryExists im Netzwerk will nicht wie ich
@Marco
Hast du den Code 1:1 übernommen oder an deine Situation angepasst? |
AW: DirectoryExists im Netzwerk will nicht wie ich
Sende ein net use * \\ComputerName\ShareFolderName vor dem
DirectoryExists... |
AW: DirectoryExists im Netzwerk will nicht wie ich
Zitat:
|
AW: DirectoryExists im Netzwerk will nicht wie ich
Hallo zusammen,
was ein bißchen MSDN lesen nicht alles bringt. also: setze ich, in meinem Fall, lpLocalName auf 'n:' ist alles schön. Wow! Herzlichen Dank! Wie schreibt Sir Rufo immer so treffend "kaum macht man's richtig, schon funktioniert's" Herzliche Grüße Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 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