Je me demande simplement: 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 à l'emplacement) .
Le problème 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ère utiliser quelque chose de natif MS.
Étant donné que la fonction doit pouvoir vérifier:
- Chemins relatifs (./)
- Chemins absolus (c: \ tmp)
- Chemins UNC (\ some-pc \ c $)
- NTFS-Limitations comme le chemin complet 1024 caractères - Si je ne me trompe pas, le dépassement du chemin rendra un fichier inaccessible pour de nombreuses fonctions Windows internes. Le renommer avec Explorer fonctionne toujours
- Chemins du GUID du volume: "\? \ Volume {GUID} \ somefile.foo
Quelqu'un a-t-il une fonction comme celle-ci?
Réponses:
Essayez
Uri.IsWellFormedUriString()
:La chaîne n'est pas correctement échappée.
La chaîne est un Uri absolu qui représente un Uri de fichier implicite.
La chaîne est un URI absolu auquel il manque une barre oblique avant le chemin.
La chaîne contient des barres obliques inverses sans échappement même si elles sont traitées comme des barres obliques.
La chaîne représente un Uri absolu hiérarchique et ne contient pas ": //".
L'analyseur de l'Uri.Scheme indique que la chaîne d'origine n'était pas bien formée.
la source
@"foo\bar\baz"
, qui est un chemin relatif parfaitement valide ...Ou utilisez FileInfo comme suggéré dans En C # vérifiez que le nom de fichier est peut - être valide (pas qu'il existe) .
la source
la source
Je n'ai eu aucun problème avec le code ci-dessous. (Les chemins relatifs doivent commencer par «/» ou «\»).
Par exemple, ceux-ci renverraient false:
Et ceux-ci reviendraient vrai:
la source
Vous pouvez essayer ce code:
Je ne suis pas sûr que cela couvre tous les cas ...
la source
Le plus proche que je suis venu est d'essayer de le créer et de voir s'il réussit.
la source
Il y a beaucoup de bonnes solutions ici, mais comme aucune de celles-ci, vérifiez si le chemin est enraciné dans un lecteur existant en voici un autre:
Cette solution ne prend pas en compte les chemins relatifs.
la source
Récupérez les caractères non valides
System.IO.Path.GetInvalidPathChars();
et vérifiez si votre chaîne (chemin du répertoire) les contient ou non.la source
Annuaire.Existe?
la source
la source
Utilisez simplement
la source
Vous pouvez essayer d'utiliser Path.IsPathRooted () en combinaison avec Path.GetInvalidFileNameChars () pour vous assurer que le chemin est à mi-chemin.
la source