2009-05-26 6 views
5

У меня есть полный путь, как показано ниже.Как получить часть из полного пути в C#?

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd 

Как можно «отделить» часть DTD от всей этой части?

Желаемый результат:

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug‌​\DannyGoXuk.DTDs 

Могу ли я использовать методы String «s для этого?
Если да, то как его получить?

+4

Пожалуйста, напишите вывод что вы хотите из этого примера. Похоже, вы хотите имя файла, но вы говорите «каталог». – harpo

+0

Я хочу Справочник DTD –

+1

Или, возможно, должен быть \ где есть. после DTD? – RichardOD

ответ

7

Редактировать: Пожалуйста, внимательно прочитайте вопрос OP и все ее комментарии перед тем, как спустить это. Вопрос титула OP не является ТОЧНО, что она хотела. Мой ответ дал ей то, что ей нужно, чтобы решить ее проблему. Вот почему она проголосовала за ответ. Да, ответ Джоэла верен, если он специально отвечает на вопрос заголовка. Но, прочитав ее комментарии, вы увидите, что не совсем то, что она искала. Благодарю.

Используйте этот ...

string strFullPath = @"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"; 
string strDirName; 
int intLocation, intLength; 

intLength = strFullPath.Length; 
intLocation = strFullPath.IndexOf("DTDs"); 

strDirName = strFullPath.Substring(0, intLocation); 

textBox2.Text = strDirName; 
+0

Спасибо JimDel, но эта часть дала мне o/p «DTDs.xhtml-math-svg-flat.dtd». Я просто ищу DTD. Я не хочу, чтобы файл xhtml-math-svg-flat.dtd с ним. –

+0

использовать эту подстроку вместо этого ... strDirName = strFullPath.Substring (0, intLocation); – JimDel

+1

Спасибо Джим, это только я искал ..... –

76

Используйте System.IO.Path.GetDirectoryName() для всего пути, или new DirectoryInfo(path).Parent.Name только для названия одной папки.


Там нет каталога с именем «ОТД» в пути вы публикуемую. Кажется, что есть файл с именем "DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd", но периоды (.) В этом пути являются недопустимыми символами разделителя каталогов. Возможно, вы имели в виду "DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd"?

Если это так, учитывая, что весь новый путь, вы хотите что-то вроде этого, чтобы вернуть список файлов в папке DTDs:

string path = @"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd"; 
string[] files = new DirectoryInfo(path).Parent.GetFiles(); 

в окне свойств я выбираю Тип сборки как встроенный ресурс.

И теперь мы наконец добираемся до него. Когда вы выбираете «Встроенный ресурс», элемент входит в ваш исполняемый файл программы. Прямого пути нет.. Вместо этого установите для параметра «Тип сборки» значение «Содержимое» и установите «Копировать в выходной каталог» на «Копировать всегда» или «Копировать, если новый».

+0

Не работает.Фактически, он возвращает только нежелательную часть ... –

+0

Он дает значение NULL –

+3

GetDirectoryName («C: \ Mehrdad \ Test») возвращает «C: \ Mehrdad» –

12

Вызов

System.IO.Path.GetFileName 

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

Если у вас есть имя файла, и вы просто хотите имя родительского каталога:

var directoryFullPath = Path.GetDirectoryName(@"C:\DTDs\mydtd.dtd"); // C:\DTDs 
var directoryName = Path.GetFileName(directoryFullPath); // DTDs 
+1

GetFileName() вернет «mydtd.dtd» –

+0

GetFileName, заданное в пути к каталогу, вернет последнюю часть. Вы должны вызвать его с помощью * path path *, который вы можете получить из GetDirectoryName. Я объяснил это в редакции. –

+0

Я неправильно понял, что вы делали двухэтапный процесс, считая, что вы вызываете GetFileName() в исходной строке. –

5
System.IO.Path.GetFileName(System.IO.Path.GetDirectoryName(fullPath)) 

Это будет возвращать только имя папки, содержащей файл.

Для

C:\windows\system32\user32.dll 

это вернет

system32 

Я выводя, что это то, что вы хотите.

+0

Спасибо, что Harpo u немного близок к моему ответу, но здесь у вас есть разделитель каталога, чтобы получить «System32» в качестве каталога, но в моем случае нет такой «/» вещи. В то время как у меня есть файлы из ресурсов, и эти файлы находятся в папке DTD под DannyGoXuk Project.so, я собираю эти файлы один за другим с использованием цикла foreach и хочу получить каталог DTD. Это просто дано DannyGoXuk.DTDs.xhtml-math- svg-flat.dtd.where xhtml-math-svg-flat.dtd - это файл dtd в каталоге DTD в проекте DannyGoXuk. –

2

Вы можете использовать:

System.IO.Path.GetDirectoryName(path); 
2

Вы можете использовать Path ...

Path.GetDirectoryName(myStr); 
2

Не используйте манипуляций со строками напрямую. Вместо того, чтобы использовать GetDirectoryName класса Path:

System.IO.Path.GetDirectoryName(myPath); 
+0

It dosent work out .. –

+0

Это сработало отлично для меня. –

2

Используйте объект FileInfo ...

FileInfo info = new FileInfo(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"); 
string directoryName = info.Directory.FullName; 

этот файл даже не должен реально существовать.

+0

Я получаю эту ошибку .. Невозможно неявно преобразовать тип 'System.IO.FileInfo' в 'System.Reflection.FieldInfo' \t Поскольку я использую файлы в ресурсах. –

1

Path.GetDirectory на пути, который вы настроили возвращает:

"C: \ Users \ Ronny \ Desktop \ Sources \ Danny \ Kawas \ ствол \ CSharp \ ImportME \ XukMe \ Bin \ Debug"

Try это самостоятельно:

var path = Path.GetDirectoryName(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"); 

Ваш вопрос немного странный, хотя нет каталога под названием DTD.

+0

Справочник DTD в проекте DannyGoXuk.i встроил все файлы ресурсов в каталог DTD. В коде я хочу получить этот каталог, как это сделать, это только я хочу знать? Спасибо .. –

5

Использование:

string dirName = new DirectoryInfo(fullPath).name; 
9

Вы также можете использовать Directory получить каталог из полного пути к файлу:

Directory.GetParent(path).FullName 
Смежные вопросы