Comment (rapidement) vérifier si le Chemin d'accès UNC est disponible
Comment puis-je vérifier si un Chemin d'accès UNC est disponible?
J'ai le problème que la vérification prend environ une demi-minute, si le partage est pas disponibles :
var fi = new DirectoryInfo(@"\\hostname\samba-sharename\directory");
if (fi.Exists)
//...
Est-il un moyen plus rapide pour vérifier si un dossier est disponible?
Je suis sous Windows XP et C#.
- La seule façon de savoir si le dossier est utilisable est de tenter de l'utiliser - tout autre contrôle est susceptible de donner de faux positifs
- Je suis d'accord, c'est le moyen le plus rapide. Le fait que cela prend du temps n'est pas causée par un code efficace, c'est le serveur du temps d'accès au disque.
- J'ai du retard lorsque l'action n'est pas accessible (donc serveur qui n'est pas accessible) et il est assez long, comme une demi-minute.
- Son temps par défaut mécanisme.
- Est-il possible de réduire ce délai d'attente lors de la vérification?
- Non pas que je suis au courant de. Et si oui, je suppose que c'est un paramètre à l'échelle du système
Vous devez vous connecter pour publier un commentaire.
Comment est-ce une façon rapide et sale à l'arrivée d'exécuter windows
net use
de commande et d'analyser les données en sortie de la ligne avec le chemin d'accès réseau de l'intérêt (par exemple,\\vault2
) etOK
. Voici un exemple de sortie:Ce n'est pas une très .netish solution, mais il est très rapide, et parfois que les questions les plus :-).
Et voici le code pour le faire (et LINQPad me dit qu'il ne prend 150ms, donc c'est agréable)
Ou vous pourriez probablement suivre la voie de l'aide WMI, comme mentionné dans cette réponse à Comment assurer les lecteurs réseau sont connectés à une application?
line.Contains("OK")
àline.StartsWith("OK")
dans le cas où le chemin d'accès contient des "OK"Dans mon projet, j'utilise le Système.IO :
et il est assez rapide pour l'instant...
Dans un projet de mine, j'ai eu à vérifier si un serveur de connexion a été établie ou non. J'ai utilisé un Socket TCP pour asynchronically vérifier si le serveur pourrait être atteint ou non. Je me demande si vous pouvez l'utiliser pour vérifier sur un partage réseau. L'async Socket TCP connect va tellement vite que j'ai testé pour la connexion 10 fois moins de 60 millisecondes. Peut-être que vous pourriez jouer avec un peu ?
EDIT: Ici, c'est le Socket Asynchrones j'ai utilisé pour mon projet. Utilisez cette classe pour vérifier certaines IP ou l'adresse. J'espère que c'est de l'utiliser pour vous
Edit: s'il vous Plaît ne pas simplement copier/coller. Essayer de comprendre le code de sorte que vous pouvez l'utiliser à votre avantage, et affiner vos besoins.
J'ai utilisé le ping méthode suggérée ci-dessus et il ne fonctionne pas pour moi, depuis que j'utilise OpenDNS
Voici une fonction qui a bien fonctionné pour moi:
C'est probablement le moyen le plus rapide, le délai sera le réseau général/vitesse d'accès au disque etc.
Si cela est la cause d'un retard de l'utilisateur, vous pouvez essayer de vérifier cela de façon asynchrone?
J'ai fini de la "triche" et juste une requête ping à l'hôte, ce qui est raisonnable que dans la réalité est le cas que je vérifie pour.
De cette façon me convient le mieux en raison de sa rapidité, de simplicité et de fiabilité.
Peut-être que vous devriez essayer de créer le dossier s'il n'existe pas, il retournera un message d'erreur que vous pourriez attraper. Il devrait y avoir aucun délai d'attente par défaut.