137 votes

Vérifiez si un chemin est valide

Je me demande juste : je cherche un moyen de valider si un chemin donné est valide. (Note : Je ne veux pas vérifier si un fichier existe ! Je veux seulement prouver la validité du chemin - Donc si un fichier pourrait éventuellement exister à cet emplacement).

Le problème, c'est que je ne trouve rien dans l'API .Net. En raison des nombreux formats et emplacements pris en charge par Windows, je préférerais utiliser quelque chose de natif à Microsoft.

Étant donné que la fonction devrait pouvoir vérifier contre :

  • Chemin relatif (./)
  • Chemin absolu (c:\tmp)
  • Chemin UNC (\some-pc\c$)
  • Limitations de NTFS comme le chemin complet de 1024 caractères - Si je ne me trompe pas, dépasser la limite de chemin rendra un fichier inopérable pour de nombreuses fonctions internes de Windows. Le renommer avec l'Explorateur fonctionne toujours
  • Chemins GUID de volume : "\?\Volume{GUID}\somefile.foo

Est-ce que quelqu'un a une fonction comme ça ?

69voto

abatishchev Points 42425

Essayez Uri.IsWellFormedUriString():

  • La chaîne n'est pas correctement échappée.

      http://www.example.com/path???/nom de fichier
  • La chaîne est un Uri absolu qui représente un Uri de fichier implicite.

      c:\\répertoire\nom de fichier
  • La chaîne est un URI absolu qui manque d'un slash avant le chemin.

      file://c:/répertoire/nom de fichier
  • La chaîne contient des antislash non échappés même s'ils sont traités comme des slashs obliques.

      http:\\hôte/chemin/fichier
  • La chaîne représente un Uri absolu hiérarchique et ne contient pas "://".

      www.example.com/chemin/fichier
  • L'analyseur pour le Uri.Scheme indique que la chaîne originale n'était pas bien formée.

      L'exemple dépend du schéma de l'URI.

0 votes

Cela semble très prometteur... Je vais y jeter un coup d'œil plus attentif! Je laisserai un message après avoir évalué si la méthode répond à mon besoin ! Merci abatishchev

14 votes

Cela renvoie false pour @"foo\bar\baz", qui est un chemin relatif parfaitement valide...

6 votes

Thomas: Quel UriKind avez-vous spécifié? Vous pouvez utiliser Absolu, Relatif ou AbsoluOuRelatif.

32voto

Patko Points 2718

1 votes

En utilisant la solution publiée par "LamdaComplex", sur le même fil, semble plus précis : stackoverflow.com/a/11636052/2546739

6voto

Nimrod Points 27

Vous pouvez essayer ce code :

try
{
  Path.GetDirectoryName(myPath);
}
catch
{
  // Le chemin n'est pas valide
}

Je ne suis pas sûr que cela couvre tous les cas...

1voto

Martijn Points 2199

Le plus près que je suis arrivé est en essayant de le créer et en voyant s'il réussit.

1voto

Chilaka Umesh Points 993

Obtenez les caractères non valides de System.IO.Path.GetInvalidPathChars(); et vérifiez si votre chaîne (chemin de répertoire) les contient ou non.

4 votes

Ceci n'est pas entièrement valide. "C:\new.folder" est valide tandis que "C:\newfolder." ne l'est pas. '.' est un caractère valide pour un chemin/nom de fichier, mais pas à la fin de l'URI.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X