如何从当前文件路径向上导航一个文件夹

本文关键字:导航 文件夹 一个 路径 文件 | 更新日期: 2023-09-27 17:59:16

我需要从文件的当前路径向上导航一个文件夹,并在那里保存相同的文件。如何从目录路径中剥离一个级别?非常感谢。

C:'Users'stacy.zim'AppData'Local'Temp'ICLocal'e53486af-7e5e-4c54-b9dc-d15cb55f3f55.pdf

文件将保存到下面。

C:'Users'stacy.zim'AppData'Local'Temp'e53486af-7e5e-4c54-b9dc-d15cb55f3f55.pdf

如何从当前文件路径向上导航一个文件夹

实际上它被称为"一个文件夹向上"的父级

System.IO.DirectoryInfo.Parent

// Method 1 Get by file
var file = new FileInfo(@"C:'Users'stacy.zim'AppData'Local'Temp'ICLocal'e53486af-7e5e-4c54-b9dc-d15cb55f3f55.pdf");
var parentDir = file.Directory == null ? null : file.Directory.Parent; // null if root
if (parentDir != null)
{
    // Do something with Path.Combine(parentDir.FullName, filename.Name);
}

System.IO.Directory.GetParent()

// Method 2 Get by path
var parentDir = Directory.GetParent(@"C:'Users'stacy.zim'AppData'Local'Temp'ICLocal'");
string path = @"C:'Users'stacy.zim'AppData'Local'Temp'ICLocal'e53486af-7e5e-4c54-b9dc-d15cb55f3f55.pdf"
string directory = Path.GetDirectoryName(path); //without file name
string oneUp = Path.GetDirectoryName(directory); // Temp folder
string fileOneUp = Path.Combine(oneUp, Path.GetFileName(path));

如果原始文件在根文件夹中,请小心,那么oneUp将是nullPath.Combine将抛出异常。

编辑:

在上面的代码中,为了清晰起见,我将命令拆分在不同的行上。它可以在一行中完成:

Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(path)), Path.GetFileName(path));

或者,正如@AlexeiLevenkov建议的那样,您可以使用..来查找一个目录。在这种情况下,你可以做:

Path.Combine(Path.GetDirectoryName(path), @"..'"+Path.GetFileName(path));

这将在您的路径中为您提供..——如果您不希望这样,请对结果运行Path.GetFullPath。同样,如果你的原始文件在根文件夹中,你需要小心——与第一种方法不同,它会抛出一个异常,这只会给你相同的路径。