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
8 Réponses :
Vous pouvez essayer:
string myNewString = myOriginalString;
for(i=0;i<NumberToChop;i++)
{
if(LastIndexOf(@"\") > 0)
myNewString = myNewString.SubString(0, LastIndexOf(@"\"));
}
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.
J'irais avec la classe DirectoryInfo et sa propriété mère. P>
http://msdn.microsoft.com/fr- US / Bibliothèque / System.IO.DirectoryInfo.aspx P>
var path = "C:\workspace\AccurevTestStream\ComponentB\include"; DirectoryInfo d = new DirectoryInfo(path); var result = d.Parent.Parent.FullName;
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;
}
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
static String GoUp(String path, Int32 num)
{
if (num-- > 0)
{
return GoUp(Directory.GetParent(path).ToString(), num);
}
return path;
}
même que le mien , plutôt.
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);
Je ne pense pas qu'il a l'intention de supprimer les répertoires, seulement pour les supprimer de la chaîne de chemin.
Le moyen le plus simple de le faire: note strong> Cela va à deux niveaux. Le résultat serait:
NewPath = @ "C: \ WorkSpace \ AccrevtestStream \"; Code> P> P>
Comment allez-vous décider combien d'enlever? Est-ce prédéterminé?
Comme il est variable, je serais tenté d'aller avec
Split code> etrejoindre code>.