例如,
string path = @"C:\User\Desktop\Drop\images\";
我需要获取@"C:\User\Desktop\Drop\
路径。
有没有简单的方法可以做到这一点?
您可以使用 Path
和 Directory
类:
DirectoryInfo parentDir = Directory.GetParent(Path.GetDirectoryName(path));
string parent = parentDir.FullName;
请注意,如果路径不以目录分隔符字符\
结尾,则会得到不同的结果。那么images
将被视为文件名而不是目录。
还可以使用Path.GetDirectoryName
的后续调用。
string parent = Path.GetDirectoryName(Path.GetDirectoryName(path));
这种行为在此处有记录:
因为返回的路径不包括DirectorySeparatorChar或AltDirectorySeparatorChar,将返回的路径再次传递到GetDirectoryName方法中将导致每个后续调用结果字符串缩短一个文件夹级别。例如,将路径"C:\Directory\SubDirectory\test.txt"传入GetDirectoryName方法将返回"C:\Directory\SubDirectory"。将该字符串"C:\Directory\SubDirectory"传入GetDirectoryName将导致返回"C:\Directory"。
path = Directory.GetParent(Directory.GetParent(path)).ToString();
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));
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来关闭,则也是有效的。
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:\User\Desktop\Drop\
可能有一些使用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...
Directory.GetParent
的解决方案是更安全、更好的方法,而不是字符串操作。 - Habib