8
votes

Quel est un bon moyen de supprimer les derniers répertoires

J'ai besoin d'analyser une chaîne de répertoire, je reçois et supprimez les derniers dossiers.

Par exemple, lorsque j'ai cette chaîne de répertoire: P>

C:\workspace\AccurevTestStream


2 commentaires

Comment allez-vous décider combien d'enlever? Est-ce prédéterminé?


Comme il est variable, je serais tenté d'aller avec Split et rejoindre .


8 Réponses :


1
votes

Vous pouvez essayer:

string myNewString = myOriginalString;
for(i=0;i<NumberToChop;i++)
{
    if(LastIndexOf(@"\") > 0)
        myNewString = myNewString.SubString(0, LastIndexOf(@"\"));
}


2 commentaires

Non, pas le dernier, j'ai besoin de couper un, deux répertoires ou plus.


@ 5YRSLATERDBA - Ajout d'une solution encore plus inélégante. Peut être abandonné dans une méthode, transformée en extension, whatevs.



1
votes

J'irais avec la classe DirectoryInfo et sa propriété mère.

http://msdn.microsoft.com/fr- US / Bibliothèque / System.IO.DirectoryInfo.aspx


0 commentaires

14
votes
var path = "C:\workspace\AccurevTestStream\ComponentB\include";    
DirectoryInfo d = new DirectoryInfo(path);
var result = d.Parent.Parent.FullName;

0 commentaires

11
votes

Voici une méthode récursive simple qui suppose que vous savez combien de répertoires parent à retirer du chemin:

public string GetParentDirectory(string path, int parentCount) {
    if(string.IsNullOrEmpty(path) || parentCount < 1)
        return path;

    string parent = System.IO.Path.GetDirectoryName(path);

    if(--parentCount > 0)
        return GetParentDirectory(parent, parentCount);

    return parent;
}


0 commentaires

4
votes

Vous pouvez utiliser le system.io.path code> classe dans ce cas - si vous appelez chemin.getDirectoryName code> à plusieurs reprises, il coupera le dernier chemin:

string path = @"C:\workspace\AccurevTestStream\ComponentB\include";
path = Path.GetDirectoryName(path); //returns C:\workspace\AccurevTestStream\ComponentB
path = Path.GetDirectoryName(path); //returns C:\workspace\AccurevTestStream
//etc


0 commentaires

1
votes
    static String GoUp(String path, Int32 num)
    {
        if (num-- > 0)
        {
            return GoUp(Directory.GetParent(path).ToString(), num);
        }
        return path;
    }

1 commentaires

-1
votes

Et cela (désolé, je ne sais pas ce que votre critère est de déterminer quoi supprimer) ...

var di = new System.IO.DirectoryInfo("C:\workspace\AccurevTestStream\ComponentB\include");
while (!deleteDir)
    di = di.Parent;
di.Delete(true);


1 commentaires

Je ne pense pas qu'il a l'intention de supprimer les répertoires, seulement pour les supprimer de la chaîne de chemin.



1
votes

Le moyen le plus simple de le faire: xxx

note Cela va à deux niveaux. Le résultat serait: NewPath = @ "C: \ WorkSpace \ AccrevtestStream \";


0 commentaires