Existe-t-il une méthode pour vérifier si le chemin donné est un chemin complet? En ce moment, je fais ceci:
if (template.Contains(":\\")) //full path already given
{
}
else //calculate the path from local assembly
{
}
Mais il doit y avoir un moyen plus élégant de vérifier cela?
c#
.net
validation
path
hs2d
la source
la source
IsPathRooted
: éviter d'accéder au système de fichiers ou de lever des exceptions pour une entrée invalide.IsPathRooted
, ce n'était certainement rien de significatif. LaGetFullPath
ligne a été incluse afin que le chemin en cours d'évaluation puisse être observéLa condition ci-dessus:
false
dans la plupart des cas où le format depath
n'est pas valide (plutôt que de lever une exception)true
uniquement sipath
inclut le volumeDans des scénarios comme celui proposé par le PO, il peut donc être plus approprié que les conditions des réponses précédentes. Contrairement à la condition ci-dessus:
path == System.IO.Path.GetFullPath(path)
lève des exceptions plutôt que de revenirfalse
dans ces scénarios:System.IO.Path.IsPathRooted(path)
renvoietrue
sipath
commence par un seul séparateur de répertoire.Enfin, voici une méthode qui englobe la condition ci-dessus et exclut également les exceptions possibles restantes:
EDIT: EM0 a fait un bon commentaire et une réponse alternative abordant le cas curieux des chemins comme
C:
etC:dir
. Pour vous aider à décider de la manière dont vous souhaitez gérer ces chemins, vous voudrez peut-être vous plonger dans MSDN -> Applications de bureau Windows -> Développer -> Technologies de bureau -> Accès aux données et stockage -> Systèmes de fichiers locaux - -> Gestion des fichiers -> À propos de la gestion des fichiers -> Création, suppression et maintenance de fichiers -> Nommer des fichiers, des chemins et des espaces de noms -> Chemins complets ou relatifsla source
Essayer
Fonctionne aussi bien pour les chemins UNC que pour les chemins locaux.
Par exemple
la source
Ancienne question, mais une autre réponse applicable. Si vous devez vous assurer que le volume est inclus dans un chemin local, vous pouvez utiliser System.IO.Path.GetFullPath () comme ceci:
la source
GetFullPath
accède au système de fichiers et peut lever un certain nombre d'exceptions possibles. Voir ma réponse ( stackoverflow.com/a/35046453/704808 ) pour une alternative qui assure toujours un chemin complet.Construire sur déversoir de réponse « : cela ne jette pas pour les chemins invalides, mais aussi des retours
false
pour les chemins comme « C: », « C: dirname » et « \ chemin ».Notez que cela renvoie des résultats différents sous Windows et Linux, par exemple "/ path" est absolu sous Linux, mais pas sous Windows.
Test de l'unité:
la source
Pour vérifier si un chemin est pleinement qualifié (MSDN) :
C'est un peu plus simple que ce qui a déjà été proposé, et il renvoie toujours false pour les chemins relatifs aux lecteurs comme
C:foo
. Sa logique est basée directement sur la définition MSDN de «pleinement qualifié», et je n'ai trouvé aucun exemple sur lequel il se comporte mal.Fait intéressant cependant, .NET Core 2.1 semble avoir une nouvelle méthode
Path.IsPathFullyQualified
qui utilise une méthode internePathInternal.IsPartiallyQualified
(emplacement du lien précis à partir du 17/04/2018).Pour la postérité et une meilleure maîtrise de soi de cet article, voici la mise en œuvre de ce dernier pour référence:
la source
C'est la solution que j'utilise
Cela fonctionne de la manière suivante:
la source
C:\foo\..\foo
ouC:\foo\.\.\.
Appelez la fonction suivante:
MSDN doc: méthode Path.IsPathFullyQualified
La citation utile de MSDN doc suit:
la source
Je ne suis pas vraiment sûr de ce que vous entendez par chemin complet (bien qu'en supposant à partir de l'exemple que vous vouliez dire non relatif à partir de la racine), eh bien, vous pouvez utiliser la classe Path pour vous aider à travailler avec des chemins de système de fichiers physiques, ce qui devrait couvrir vous pour la plupart des éventualités.
la source