如何在C#中的路径字符串中获取倒数第二个目录

时间:2012-12-18 12:39:18

标签: c# string path directory

例如,

string path = @"C:\User\Desktop\Drop\images\";

我只需要@"C:\User\Desktop\Drop\

有没有简单的方法可以做到这一点?

7 个答案:

答案 0 :(得分:9)

您可以使用PathDirectory类:

DirectoryInfo parentDir = Directory.GetParent(Path.GetDirectoryName(path));
string parent = parentDir.FullName; 

请注意,如果路径未以目录分隔符char \结束,则会得到不同的结果。然后images将被理解为文件名而不是目录。

您还可以使用Path.GetDirectoryName

的后续调用
string parent = Path.GetDirectoryName(Path.GetDirectoryName(path));

此行为记录在案here

  

因为返回的路径不包含DirectorySeparatorChar   或者AltDirectorySeparatorChar,将返回的路径传回   GetDirectoryName方法将导致截断一个文件夹   每次后续调用结果字符串的级别。例如,传递   路径“C:\ Directory \ SubDirectory \ test.txt”进入   GetDirectoryName方法将返回“C:\ Directory \ SubDirectory”。   将该字符串“C:\ Directory \ SubDirectory”传入   GetDirectoryName将生成“C:\ Directory”。

答案 1 :(得分:1)

var parent = ""; 
If(path.EndsWith(System.IO.Path.DirectorySeparatorChar) || path.EndsWith(System.IO.Path.AltDirectorySeparatorChar))
{
  parent = Path.GetDirectoryName(Path.GetDirectoryName(path));
  parent = Directory.GetParent(Path.GetDirectoryName(path)).FullName;
}
else
  parent = Path.GetDirectoryName(path);

正如我评论的GetDirectoryName是自我折叠它返回路径而没有尾随斜杠 - 允许获取下一个目录。使用Directory.GetParent然后clouse也是有效的。

答案 2 :(得分:1)

简答:)

path = Directory.GetParent(Directory.GetParent(path)).ToString();

答案 3 :(得分:0)

这将返回“C:\ User \ Desktop \ Drop \”,例如除了最后一个子目录之外的所有内容

string path = @"C:\User\Desktop\Drop\images";
string sub = path.Substring(0, path.LastIndexOf(@"\") + 1);

如果您有一个尾部斜杠,则为另一种解决方案:

string path = @"C:\User\Desktop\Drop\images\";
var splitedPath = path.Split('\\');
var output = String.Join(@"\", splitedPath.Take(splitedPath.Length - 2));

答案 4 :(得分:0)

答案 5 :(得分:0)

using System;

namespace Programs
{
    public class Program
    {      
        public static void Main(string[] args)
        {
            string inputText = @"C:\User\Desktop\Drop\images\";
            Console.WriteLine(inputText.Substring(0, 21));
        }
    }
}

输出:

  

C:\用户\桌面\掉落\

答案 6 :(得分:0)

使用File或Path类可能有一些简单的方法,但你也可以通过这样做来解决它(注意:未经测试):

string fullPath = "C:\User\Desktop\Drop\images\";
string[] allDirs = fullPath.split(System.IO.Path.PathSeparator);

string lastDir = allDirs[(allDirs.length - 1)];
string secondToLastDir= allDirs[(allDirs.length - 2)];
// etc...