如何从C#的完整路径中获取一部分?

cra*_*gal 5 c# string directory

我有一个完整的路径,如下所示.

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd
Run Code Online (Sandbox Code Playgroud)

如何从这整个部分中获取DTD"部分"?

期望的输出:

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug??\DannyGoXuk.DTDs
Run Code Online (Sandbox Code Playgroud)

我能用String这个方法吗?
如果是,那么如何获取它?

Joe*_*orn 76

使用System.IO.Path.GetDirectoryName()整个路径,或new DirectoryInfo(path).Parent.Name为一个文件夹的只是名字.


您发布的路径中没有名为"DTD"的目录. IT看起来有一个名为的文件"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();
Run Code Online (Sandbox Code Playgroud)

在属性窗口中,我选择Build Type作为嵌入式资源.

现在我们终于明白了.选择"嵌入式资源"时,该项目将捆绑到可执行程序文件中. 没有直接的路径了.而是将您的构建类型设置为"内容"并将"复制到输出目录"设置为"始终复制"或"如果更新则复制".

  • GetDirectoryName("C:\ Mehrdad\Test")返回"C:\ Mehrdad" (3认同)

Meh*_*ari 12

调用

System.IO.Path.GetFileName
Run Code Online (Sandbox Code Playgroud)

使用完整目录路径返回路径的最后一部分,即目录名称.GetDirectoryName返回不需要的父目录的整个路径.

如果您有文件名,并且只想要父目录的名称:

var directoryFullPath = Path.GetDirectoryName(@"C:\DTDs\mydtd.dtd");  // C:\DTDs
var directoryName = Path.GetFileName(directoryFullPath);  // DTDs
Run Code Online (Sandbox Code Playgroud)


Dav*_*mer 9

您还可以使用Directory从完整文件路径获取目录:

Directory.GetParent(path).FullName
Run Code Online (Sandbox Code Playgroud)


Jim*_*Del 7

编辑:请在下载之前仔细阅读OP的问题及其所有评论.OP的标题问题并不完全是她想要的.我的回答给了她解决问题所需要的东西.这就是为什么她投票给答案的原因.是的,如果专门回答标题问题,Joel的回答是正确的.但在阅读她的评论之后,你会发现她并不完全是在寻找什么.谢谢.

用这个 ...

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;
Run Code Online (Sandbox Code Playgroud)

  • 这是答案 (3认同)

har*_*rpo 5

System.IO.Path.GetFileName( System.IO.Path.GetDirectoryName( fullPath ) )
Run Code Online (Sandbox Code Playgroud)

这将只返回包含该文件的文件夹的名称.

对于

C:\windows\system32\user32.dll
Run Code Online (Sandbox Code Playgroud)

这将回来

system32
Run Code Online (Sandbox Code Playgroud)

我推断那就是你想要的.


Jam*_*mes 5

使用:

string dirName = new DirectoryInfo(fullPath).name;
Run Code Online (Sandbox Code Playgroud)