2014-08-04 4 views
0

Это, вероятно, просто, но я пытаюсь получить корневой каталог в моем коде.Получение корня каталога не действует, как ожидалось

Вот мой код:

var appdir = AppDomain.CurrentDomain.BaseDirectory; 
var ppsdir = Directory.GetParent(appdir).FullName; 

appdir is coming back as "C:\\Program Files (x86)\\PPS\\PpsUpdate\\" 
but ppsdir is coming back as "C:\\Program Files (x86)\\PPS\\PpsUpdate" 

мне нужно ppsdir быть "C: \ Program Files (x86) \ ПФС", так что я не уверен, что я делаю неправильно.

Спасибо в продвижении.

+1

Это обратная косая черта. Он работает * точно * [как задокументировано] (http://msdn.microsoft.com/en-us/library/system.io.directory.getparent (v = vs.110) .aspx): «Строка, возвращаемая этим метод состоит из всех символов пути до, но не включая, последнего 'DirectorySeparatorChar' или' AltDirectorySeparatorChar' ... pass '" C: \ Directory \ SubDirectory \ "' возвращает '' C: \ Directory \ SubDirectory' " , потому что конечный разделитель каталога находится после '' SubDirectory''. " –

ответ

2

Попробуйте это вместо:

var appdir = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory); 
var ppsdir = Directory.GetParent(appdir).FullName; 

Это должно дать вам правильный реж.

Path.GetDirectoryName получит имя пути до и не включая последний каталог DirectorySeparatorChar. См. MSDN. Directory.GetParent получает родительский каталог из строки, которую мы передаем.

+0

@CodeCaster Конечно. Я немного устал. Я уточнил ответ с некоторым объяснением. –

+0

спасибо! это сработало! – ErocM

2

См Directory.GetParent в MSDN:

Строка, возвращаемая этим методом состоит из всех символов в пути до, но не включая, последний DirectorySeparatorChar или AltDirectorySeparatorChar.

Так что в нашем случае Directory.GetParent кажется просто отрезать последний \.

Как предлагалось @CodeCaster, вы можете использовать TrimEnd, чтобы избавиться от отставания \ s.

Смежные вопросы