Supprimer le lecteur (ou le nom de réseau) du chemin en C#

Quelle est la façon la plus concise (mais sûre) de supprimer un nom de disque, un chemin réseau, etc. à partir d'un chemin d'accès absolu en C#?

par exemple, convertir

networkmachinefoobar

ou

C:foobar

foobar.

il semble y avoir un bon nombre de questions déjà répondues en ce qui concerne les questions de chemin, mais je ne pouvais pas tout à fait trouver 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 ne suis d'ailleurs travailler avec un chemin absolu et ensuite juste utiliser une expression régulière pour trouver la première barre oblique qui n'est pas à côté d'une autre. Cependant, l'utilisation d'une expression régulière pour manipuler le chemin semble légèrement dangereuse.

serait-il peut-être plus sage d'obtenir le lecteur lettre/cible machine de réseau/etc, convertir les chaînes en Uri, et demander le chemin relatif au lecteur/machine, et ensuite convertir de nouveau en chaînes? Ou est-il une meilleure approche?

23
demandé sur Luke Girvin 2011-10-14 23:19:34

4 réponses

utiliser

string MyPath = @""; // \networkmachine\foo\bar OR C:\foo\bar
string MyPathWithoutDriveOrNetworkShare = MyPath.Substring (Path.GetPathRoot(MyPath).Length);

Résultat C:\foo\barfoo\bar et \networkmachine\foo\barbar.

Pour référence MSDN voir http://msdn.microsoft.com/en-us/library/system.io.path.getpathroot.aspx

MODIFIER - commentaires:

Avec "string voodoo" (qui N'est pas concise IMHO et donc pas recommandé) vous pouvez faire ceci:

if ( ( MyPath.IndexOf (":") == 1 ) || ( MyPath.IndexOf ( "\\" ) == 0 ) )
     { MyPathWithoutDriveOrNetworkShare = MyPath.Substring (2); }
if ( MyPathWithoutDriveOrNetworkShare.IndexOf ( "\" ) > 0 )
     MyPathWithoutDriveOrNetworkShare = MyPathWithoutDriveOrNetworkShare.Substring ( MyPathWithoutDriveOrNetworkShare.IndexOf ( "\" ) );  
30
répondu Yahia 2015-02-13 12:58:05

Avez-vous regardé la classe DirectoryInfo?

Spécifiquement DirectoryInfo.Parent et DirectoryInfo.Root peut aider à découvrir le répertoire root 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

1
répondu Derrick H 2011-10-14 19:28:54

Je ne sais pas ce qu'est la sécurité, mais je la mettrais personnellement dans une chaîne, chercherais un" contains" ( "\\ ") ou": "et les enlèverais de la chaîne en les soustrayant.

0
répondu Haedrian 2011-10-14 19:25:21

Comme de la demande, voici comment j'ai fait:

j'ai écrit un helper classe PathHelper qu'est ce que je pense que la personne veut savoir.

Vous pouvez trouver le bibliothèque sur CodeProject, la fonction que j'utiliserais est PathHelper.GetDriveOrShare, d'une manière similaire à:

var s = @"C:\foo\bar";
var withoutRoot = s.Substring( PathHelper.GetDriveOrShare(s).Length ); 
0
répondu Uwe Keim 2011-10-14 19:30:24