2008-11-20 4 views
1

Dans .NET, existe-t-il une fonction qui teste si une chaîne est syntactiquement un chemin correct? Je ne veux surtout pas qu'il teste si le chemin existe réellement.Test d'un chemin syntaxiquement correct

ma prise en cours à ce sujet est une expression régulière:

([a-zA-Z]:|\\)?\\?([^/\\:*?"<>|]+[/\\])*[^/\\:*?"<>|]* 

matches:

c:\ 
bbbb 
\\bob/john\ 
..\..\ 

rejette:

xy: 
c:\\bob 

Répondre

1

Je suggère simplement utiliser une expression rationnelle pour cela car vous spécifiquement ne veulent pas tester si le chemin existe.

Voici quelque chose google helped me dig up:

RegEx="^([a-zA-Z]\:|\\\\[^\/\\:*?"<>|]+\\[^\/\\:*?"<>|]+)(\\[^\/\\:*?"<>|]+)+(\.[^\/\\:*?"<>|]+)$" 

Vous pouvez combiner cette méthode avec System.IO.Path.GetInvalidPathChars() et faire le regex exclure dynamiquement tous les caractères non valides.

+0

WT .. est-ce que cela s'est échappé? Je ne suis pas capable de faire la tête ou la queue. – BCS

0

Vous pouvez peut-être utiliser System.IO.Path et la fonction GetInvalidPathChars()?

3

Je crois que System.IO.Path.GetFullPath (path) lancera une exception si ce n'est pas un chemin syntaxiquement correct sans vérifier s'il existe.

+0

Si cela fonctionne, bien, mais le cas d'échec est tout aussi valable pour moi que le cas de passage que je préfère ne pas lancer/attraper. – BCS

+0

Ouais, pourrait être ce qui est nécessaire. Voici l'msdn: http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx De l'article, "Cependant, si le chemin existe, l'appelant doit avoir l'autorisation d'obtenir le chemin informations pour le chemin. " Pourrait jeter une clé en fonction de la situation. –

Questions connexes