Retrait du lecteur (ou le nom de réseau) à partir du chemin en C#
Ce qui est le plus concis (mais sans danger) pour supprimer un nom de lecteur, le chemin d'accès réseau, etc. à partir d'un chemin d'accès absolu en C#?
Par exemple, la conversion
\\networkmachine\foo\bar
ou
C:\foo\bar
à \foo\bar
.
Il semble y avoir un bon nombre de questions déjà répondu en ce qui concerne le chemin de questions, mais je ne pouvais pas trouver exactement ce que je cherchais. Ma première pensée qui vint à l'esprit était d'utiliser le Chemin d'accès.GetFullPath() pour s'assurer que je suis en effet à travailler avec un chemin d'accès absolu et ensuite seulement à utiliser une expression régulière pour trouver la première barre oblique qui n'est pas à côté de l'autre. Cependant, en utilisant une expression régulière pour faire le chemin de la manipulation semble un peu dangereux.
Serait-il peut-être plus sage d'obtenir la lettre de lecteur/réseau cible de la machine/etc, convertir les chaînes de caractères à l'Uri, et demander le chemin relatif du lecteur/de la machine, et ensuite de les convertir en arrière à cordes? Ou est-il une meilleure approche?
- J'ai écrit mes propres fonctions d'assistance qui traitent de ce. Juste quelques
if
...else
et des opérations de chaîne. - Ensuite, il peut être agréable de partager ces méthodes avec nous. Sinon, votre commentaire est inutile 🙂
- Vous pourriez bande de la chaîne renvoyée par
Path.GetPathRoot()
depuis le début de la trajectoire, mais qui serait également la bandefoo
à partir du réseau de chemin, puisque c'est la part de nom. - Ou si vous faites beaucoup de ces manipulations, vous voudrez peut-être consulter alphafs.codeplex.com, qui contient quelques-uns supplémentaires chemin de la manipulation des options à ceux fournis par .NET avec le support pour de longues chemins (pas disponible en standard .NET)
Vous devez vous connecter pour publier un commentaire.
utilisation
Résultat pour
C:\foo\bar
seraitfoo\bar
et pour\\networkmachine\foo\bar
seraitbar
.De référence MSDN voir http://msdn.microsoft.com/en-us/library/system.io.path.getpathroot.aspx
ÉDITER en tant que par commentaires:
Avec "string " vaudou" (qui n'est PAS concis, à mon humble avis et n'est donc PAS recommandé), vous pourriez faire ceci:
Avez-vous regardé la classe DirectoryInfo?
Spécifiquement DirectoryInfo.Parent et DirectoryInfo.Racine peut aider à découvrir le répertoire racine de sorte que vous pouvez le supprimer de FullName
Parent:
http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.parent.aspx
Racine:
http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.root.aspx
Je ne sais pas à propos de la sécurité, mais j'aurais personnellement mis dans une chaîne de caractères, pour un look contient("\\") ou de": "et les retirer de la chaîne par substringing autour d'eux.
Comme de la demande, voici comment j'ai fait:
J'ai écrit une aide la classe
PathHelper
qui fait ce que je pense que la personne veut savoir.Vous pouvez trouver le bibliothèque sur CodeProject, la fonction je voudrais utiliser est
PathHelper.GetDriveOrShare
, d'une manière similaire à: