2013-07-22 4 views
2

Я хочу вырезать часть path, но не знаю как. Чтобы получить path, я использую этот код:Как вырезать часть пути?

String path = System.IO.Path.GetDirectoryName(fullyQualifiedName); 

(путь = "Y: \ Test \ Project \ Bin \ Debug")

Теперь мне нужна первая часть без"\ bin \ Debug".

Как я могу вырезать эту часть из текущего пути?

+1

ли Вы хотите сократить определенное количество уровней каталогов или сократить до определенной глубины, или вырезать '\ Bin \ Отладка? Какое правило вы пытаетесь применить? –

+3

Кажется, вы ищете корень вашего проекта. Это нехорошо, так как, когда вы публикуете или используете свое программное обеспечение в реальности, вы не получите там файлы bin/debug, поэтому лучше скопируйте все свои файлы и попробуйте использовать относительный путь, который вы найдете динамически. например, эта строка кода dir = Path.GetDirectoryName (Assembly.GetAssembly (typeof (YOURFULLYQUALIFIEDASSEMBLYNAME)). Место); –

ответ

11

Если вы знаете, что вам не нужно только "\ Bin \ Debug" вы можете использовать замену:

path = path.Replace("\bin\Debug", ""); 

или

path = path.Remove(path.IndexOf("\bin\Debug")); 

Если вы знаете, что вы не нужно все, после второго \ вы могли бы использовать это:

path = path.Remove(path.LastIndexOfAny(new char[] { '\\' }, path.LastIndexOf('\\') - 1)); 

и, наконец, вы могли бы Take так много частей, сколько вы хотите, как это:

path = String.Join(@"\", path.Split('\\').Take(3)); 

или Skip столько частей, сколько вам нужно:

path = String.Join(@"\", path.Split('\\').Reverse().Skip(2).Reverse()); 
+3

Вместо строковых методов я бы использовал класс 'Directory'. –

+0

Извините, но я не знаю, как это сделать с классом 'Directory', но есть как минимум 5 примеров, как это можно сделать с помощью' String' :) – FSou1

+3

@FSoul: 'Directory.GetParent' возвращает' FileInfo 'объект, который также имеет свойство« Родитель », если вы хотите подняться на гирархию. Объект 'FileInfo' имеет свойство 'FullName', чтобы получить его путь. Надеюсь, что мой образец работает (не смог проверить его). Http: // StackOverflow.com/a/17782827/284240 Никогда не используйте строковые методы с путями, поскольку вы изобретаете колесо и, вероятно, склонны к ошибкам. –

-1

Вам нужно заменить строку вам не нужно здесь

path = path.Replace(@"\bin\Debug", string.Empty); 
0

Вы можете сделать это всего в 3-х строках.

String path= @"Y:\\Test\\Project\\bin\\Debug"; 
String[] extract = Regex.Split(path,"bin"); //split it in bin 
String main = extract[0].TrimEnd('\\'); //extract[0] is Y:\\Test\\Project\\ ,so exclude \\ here 
Console.WriteLine("Main Path: "+main);//get main path 
+2

необходимо использовать '' \\ "', если у вас уже есть '' @ "' в начале строки? спасибо – Pyromancer

+0

Да. Нужно – ggcodes

+1

ах, спасибо, потому что я думал, что '@' в начале интерпретирует строку буквально. – Pyromancer

1

Вы можете получить путь к родительской папке вашего пути, как это:

path = Directory.GetParent(path); 

В вашем случае, вы должны сделать это дважды.

3

Вы можете использовать Path класс и последующий вызов из Directory.GetParent метода:

String dir = Path.GetDirectoryName(fullyQualifiedName); 
string root = Directory.GetParent(dir).FullName;