Quelle est la bonne façon de vérifier si un chemin est un chemin UNC ou un chemin d'accès local?
La meilleure façon de vérifier si un chemin est un chemin d'accès UNC est bien sûr à vérifier si le premier caractère dans le chemin d'accès complet est une lettre ou une barre oblique inverse. Est-ce une bonne solution ou pourrait-il y avoir des problèmes avec elle?
Mon problème est que je veux créer un Système.IO.DriveInfo-objet s'il y a une lettre de lecteur dans le chemin d'accès.
Vous devez vous connecter pour publier un commentaire.
Depuis un chemin sans deux barres obliques inverses dans la première et la deuxième position est, par définition, pas un chemin d'accès UNC, c'est un moyen sûr de prendre cette décision.
Un chemin avec une lettre de lecteur dans la première position (c:) est un enracinée chemin d'accès local.
Un chemin sans l'une de ces choses (mondossier\bla) est un chemin d'accès local. Cela comprend un chemin d'accès avec une seule barre oblique inverse (\mondossier\bla).
C
, @ShengJiang蒋晟 dans .NET nous avonsSystem.IO.Path.DirectorySeparatorChar
Essayer cette méthode d'extension
DirectoryInfo.DriveType == DriveType.Network
au lieu deUri.TryCreate
?L'approche la plus précise va être en utilisant certains interop code de la shlwapi.dll
Vous serait alors de l'appeler comme ceci:
@JaredPar a la meilleure réponse à l'aide de purement du code managé.
Un truc que j'ai trouvé est d'utiliser
dInfo.FullName.StartsWith(String.Empty.PadLeft(2, IO.Path.DirectorySeparatorChar))
où dInfo est un objet DirectoryInfo - si cette case renvoie True, alors c'est un chemin d'accès UNC, sinon, c'est un chemin d'accès local.StartsWith(new string(Path.DirectorySeparatorChar, 2))
.C'est ma version:
L'avantage de cette version sur @JaredPars version est que cela prend en charge n'importe quel chemin, et pas seulement
DriveInfo
.Peut-être que cette réponse peut être utile à quelqu'un qui veut valider seulement UNC serveur + part + sous-répertoires, par exemple de chemin d'accès pour réseau référentiel comme
\\Server1\Share1
\\Server2\Share22\Dir1\Dir2
\\Server3
Utiliser la regex suivante:
32
(2 fois) avec la longueur maximale autorisée de serveur/nom de répertoire10
avec un maximum autorisé de chemin de profondeur (nombre maximal de répertoires)[A-Za-z0-9_\-]
(2 fois) si il vous manque quelques caractères autorisés dans serveur/nom de répertoireJ'ai testé avec succès il. Profitez-en!