Vérifier si une chaîne est un Windows valide répertoire (dossier) chemin
Je suis en train de déterminer si une chaîne de caractères entrée par l'utilisateur est valide pour la représentation d'un chemin d'accès à un dossier. Par valable, je veux dire correctement formaté.
Dans ma demande, le dossier représente une destination de l'installation. À condition que le chemin d'accès au dossier est valide, je veux déterminer si le dossier existe, et de la créer si elle n'existe pas.
Je suis actuellement en utilisant IO.Directory.Exists( String path )
. Je trouve que cela fonctionne bien sauf lorsque l'utilisateur n'a pas le format de la chaîne correctement. Lorsque cela se produit, cette méthode renvoie false, ce qui indique que le dossier n'existe pas. Mais c'est un problème parce que je ne vais pas être en mesure de créer le dossier par la suite.
De ma recherche sur google, j'ai trouvé une suggestion pour utiliser une expression régulière pour vérifier si le format est correct. Je n'ai aucune expérience avec des expressions régulières, et je me demande si c'est une approche viable. Voici ce que j'ai trouvé:
Regex r = new Regex( @"^(([a-zA-Z]\:)|(\\))(\\{1}|((\\{1})[^\\]([^/:*?<>""|]*))+)$" );
return r.IsMatch( path );
Serait une expression régulière test en combinaison avec Directory.Exists()
, donnez-moi un assez bon méthode pour vérifier si le chemin est valide et si elle existe? Je sais que cela varie en fonction de l'OS et d'autres facteurs, mais le programme est ciblé pour Windows utilisateurs seulement.
- Si elle ne peut pas créer le répertoire après Directory.Existe renvoie faux, n'est-ce pas une assez bonne indication que l'utilisateur a fourni une mauvaise entrée?
- stackoverflow.com/questions/3067479/...
- stackoverflow.com/questions/422090/...
- vu que la question et il n'a pas de fournir une réponse précise, autres que des règles générales. Le 2ème plus haut réponse ne couvre pas la mise en forme, mais seulement des caractères non valides. Aussi le Répertoire.Existe méthode peut retourner false, mais depuis je veux la possibilité de créer le dossier sur place, je ne peut pas juste aller par qui.
- Sur le 2e sujet lié - de saisir un seul mot serait encore passer à la validation de la donnée dans les réponses à cette question.
- double possible de Comment vérifier si une chaîne donnée est légal (permis) de nom de fichier sous Windows?
Vous devez vous connecter pour publier un commentaire.
Appel
Path.GetFullPath
; il lèvera une exception si le chemin n'est pas valide.Pour interdire les chemins relatifs (tels que
Word
), appelPath.IsPathRooted
.C:MyDir
, le répertoireMyDir
est par rapport àC:
. (Noter la différence avec le chemin d'accèsC:\MyDir
.)cd C:\\\\\\\Windows\\\\\\\System32
. Pour Windows, je ne trouve pas de source autorisée que les documents de ce comportement, mais, bien sûr, serait la bienvenue d'un pointeur à un.J'ai fait en désaccord avec SLaks. Cette solution ne fonctionne pas pour moi. Une Exception ne se produit pas comme prévu. Mais ce code a fonctionné pour moi:
Chemin.GetFullPath donne ci-dessous des exceptions uniquement
Autre moyen est d'utiliser les éléments suivants :
Voici une solution qui tire parti de l'utilisation de Chemin d'accès.GetFullPath comme recommandé dans la réponse par @SLaks.
Dans le code que je suis ici, notez que
IsValidPath(string path)
est conçu de telle sorte que l'appelant n'a pas avoir à vous soucier de la gestion des exceptions.Vous pouvez également trouver que la méthode qu'il appelle,
TryGetFullPath(...)
, a aussi le mérite sur son propre quand vous le souhaitez en toute sécurité de la tentative d'obtenir une chemin absolu.Utiliser ce Code
Path.GetInvalidFileNameChars().Any(DirectoryName.Contains) || DirectoryName == "con"
Je n'ai pas eu de problèmes avec ce code:
Par exemple ces return false:
Et retourner la valeur true: