Как получить часть полного пути в C #? - PullRequest
5 голосов
/ 27 мая 2009

У меня есть полный путь, указанный ниже.

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 методы для этого?
Если да, то как его получить?

Ответы [ 11 ]

76 голосов
/ 27 мая 2009

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


В указанном вами пути нет каталога с именем "DTD". Похоже, что файл имеет имя "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();

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

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

12 голосов
/ 27 мая 2009

Calling

System.IO.Path.GetFileName

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

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

var directoryFullPath = Path.GetDirectoryName(@"C:\DTDs\mydtd.dtd");  // C:\DTDs
var directoryName = Path.GetFileName(directoryFullPath);  // DTDs
9 голосов
/ 28 сентября 2011

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

Directory.GetParent(path).FullName
7 голосов
/ 27 мая 2009

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

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

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;
5 голосов
/ 27 января 2011

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

string dirName = new DirectoryInfo(fullPath).name;
5 голосов
/ 27 мая 2009
System.IO.Path.GetFileName( System.IO.Path.GetDirectoryName( fullPath ) )

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

Для

C:\windows\system32\user32.dll

это вернет

system32

Я предполагаю, что это то, что вы хотите.

2 голосов
/ 27 мая 2009

Использовать объект 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;

Файл даже не должен существовать.

2 голосов
/ 27 мая 2009

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

System.IO.Path.GetDirectoryName(myPath);
2 голосов
/ 27 мая 2009

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

Path.GetDirectoryName(myStr);
2 голосов
/ 27 мая 2009

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

System.IO.Path.GetDirectoryName(path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...