如何从C#中的完整路径获取零件?

如何从C#中的完整路径获取零件?,c#,string,directory,C#,String,Directory,我有一个完整的路径,如下所示 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‌​\DannyG

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

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
的方法吗?

如果是,那么如何取回

对整个路径使用
System.IO.Path.GetDirectoryName()
,或仅对该文件夹的名称使用
new DirectoryInfo(Path.Parent.Name


您发布的路径中没有名为“DTDs”的目录。看起来有一个名为“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();

在属性窗口中,我选择构建类型作为嵌入资源

现在我们终于开始了。当您选择“嵌入式资源”时,该项将绑定到可执行程序文件中。再也没有直接的途径了。相反,将构建类型设置为“内容”,并将“复制到输出目录”设置为“始终复制”或“更新时复制”。

System.IO.Path.GetFileName
完整目录路径返回路径的最后一部分,即目录名
GetDirectoryName
返回不需要的父目录的整个路径

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

var directoryFullPath = Path.GetDirectoryName(@"C:\DTDs\mydtd.dtd");  // C:\DTDs
var directoryName = Path.GetFileName(directoryFullPath);  // DTDs
这将只返回包含该文件的文件夹的名称

为了

这会回来的

system32
我推断这就是您想要的。

您可以使用:

System.IO.Path.GetDirectoryName(path);
你可以用


不要直接使用字符串操作。而是使用Path类的
GetDirectoryName

System.IO.Path.GetDirectoryName(myPath);

使用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;

文件甚至不必真的存在。

Path.GetDirectory
在指定的路径上返回:

“C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug”

你自己试试吧:

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

不过,你的问题有点奇怪-没有名为DTDs的目录。

编辑:请仔细阅读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;
使用:

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

Directory.GetParent(path).FullName

GetDirectoryName(“C:\Mehrdad\Test”)返回“C:\Mehrdad”Joel,你误解了我的意思。在VS2008的解决方案资源管理器中,我在dannyGoXuk prj下创建了一个名为DTDs的文件夹,并将所有文件保存在其中。然后在属性窗口中,我选择构建类型作为嵌入资源。现在,我尝试获取这些文件的完整路径,我获得了上面发布的完整路径。但是我想要目录DTDs的路径。我希望我能够清除..请写出这个例子中你想要的输出。听起来你想要文件名,但你说的是“目录”。或者在有目录的地方应该有一个\。DTDs之后?我在DannyGoXuk项目中添加了一个DTDs目录,其中包含所有文件。路径不应该是C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd吗?抱歉,现在还不清楚您到底想要什么。上面的字符串(C:\…)是目录名还是文件名?你想要哪一部分,从开始到最后一个反斜杠,从最后一个反斜杠到结束,还是介于两者之间?或者要提取相对路径?GetFileName()将返回“mydtd.dtd”GetFileName,因为目录路径将返回最后一部分。您应该使用目录路径调用它,您可以从GetDirectoryName获得该路径。我在编辑中对此进行了解释。我误解了您在执行两步过程,以为您在对原始字符串调用GetFileName()。不,这没有帮助,我正在从资源中获取文件,这些文件位于DannyGoXuk项目下的DTDs文件夹中。因此,我正在使用foreach循环逐个获取这些文件,并希望获取目录DTDs。但是上面和下面的所有答案都没有帮助。@crazy_itgal:根据您在问题中提到的路径,你到底需要什么作为输出?我得到了这个错误。。无法将类型“System.IO.FileInfo”隐式转换为“System.Reflection.FieldInfo”,因为我正在使用资源中的文件。目录DTDs位于项目DannyGoXuk中。我已将所有资源文件嵌入DTDs目录中。在代码中,我想获取此目录如何操作,这只是我想知道的?谢谢..谢谢Harpo你有点接近我的答案,但这里你有目录分隔符,可以将“System32”作为目录,但在我的例子中没有这样的“/”的东西。然而,我有来自参考资料的文件,这些文件位于DannyGoXuk项目下的DTDs文件夹中。因此,我使用foreach循环逐个获取这些文件,并希望获取目录DTDs。这是DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd给出的。其中xhtml-math-svg-flat.dtd是DannyGoXuk下DTDs目录中的dtd文件谢谢JimDel,但这部分给了我o/p“DTDs.xhtml-math-svg-flat.dtd”。我只是在找DTD。我不希望文件xhtml-math-svg-flat.dtd与它一起使用。请改用此子字符串。。。strDirName=strFullPath.Substring(0,intLocation);将文件放入c:\DTDsFolder\Sources\。。。。你会看到这个脚本崩溃了。。。
var path = Path.GetDirectoryName(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd");
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;
string dirName = new DirectoryInfo(fullPath).name;
Directory.GetParent(path).FullName