Comment s'assurer qu'il n'est pas au top séparateur de répertoire dans les chemins?
Je vais avoir un problème avec AppDomain.CurrentDomain.BaseDirectory
.
Parfois, le chemin se termine par '\' et d'autres fois ça ne marche pas.
Je ne peux pas trouver une raison pour cela.
Il serait très bien si j'ai été en utilisant Path.Combine
mais je veux faire Directory.GetParent
et il aboutit à des résultats différents.
Avez-vous constaté ce problème?
Je peux faire les choses différemment pour obtenir le répertoire parent de la demande?
Mon hack est:
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
if (!baseDir.EndsWith("\\")) baseDir += "\\";
Vous devez vous connecter pour publier un commentaire.
C'est comme ça, il suffit de garder votre hack.
Dans plaine Win32 il y a une fonction d'assistance PathAddBackslash pour que. D'être cohérente avec séparateur de répertoire: vérifier
Path.DirectorySeparatorChar
etPath.AltDirectorySeparatorChar
au lieu de coder en dur\
.Quelque chose comme ceci (veuillez noter qu'il n'est pas une erreur grave de la vérification):
Pourquoi tellement code? Primaire parce que si l'utilisateur d'entrer
/windows/system32
vous ne voulez pas d'obtenir/windows/system32\
mais/windows/system32/
, diable est dans les détails...De tout mettre ensemble dans une belle auto-explicatif formulaire:
Format URI
file://
n'est pas traitée, même si elle peut paraître. Le bonne chose est de nouveau à faire ce que fait l'autre .NET fonctions d'e/S à faire: ne pas manipuler ce format (et éventuellement de lever une exception).Comme alternative, vous êtes toujours en mesure d'importer fonction Win32:
Trim()
appel n'est pas bon. (Il est probablement également permet également des espaces, mais au moins cmd.exe ne semble pas à eux, et je n'ai pas fait d'autres tests, donc je ne peux pas en être sûr.) Personnellement je venais de supprimer complètement la Garniture d'appel. Après tout ce n'est pas les fonctions de responsabilité pour "fixer" les chemins rompus. Aussi je voudrais changer la "pour ajouter de la" logique de simplement reproduire le dernier élément de séparation dans la chaîne (j'ai vu file:// chemins qui utilisent backslaches dans le reste de la chaîne).file://drive:\path\filename.ext
àfile://drive:\path\filename.ext/
, et la deuxième version crée `file://lecteur:\chemin\nom_fichier.ext`? I. e., si il y mixte séparateurs, la première version de ne pas préférer l'alternative séparateur, tandis que le second préfère la version standard?file://drive:\path1\path2
serafile://drive:\path1\path2\
. Deuxième version fait déjà comme ça. Notez, cependant, qu'il ya le plus de coin de cas à envisager (à ce proposfile://path
?) ensuite, le chose est de faire simplement ce qu' .NET de bibliothèques et d'IGNORER ce format).Vous pouvez facilement assurer le comportement que vous désirez en utilisant TrimEnd:
Afin d'être parfaitement efficace (en évitant les affectations supplémentaires), vérifier que la chaîne ne prend pas fin avec un
\
avant de faire des changements, car vous n'aurez pas toujours besoin d':TrimEnd
appel devrait inclureAltDirectorySeparatorChar
ainsiAfin d'obtenir de la croix-plate-forme de soutien que l'on peut utiliser cet extrait:
Comme une méthode:
Ou comme une extension de la méthode:
J'utilise souvent
Ou, si j'avais besoin de ce plus d'une fois ou deux fois dans le même projet, je serais probablement utiliser une aide de la fonction comme ceci: