特定父目录的 C# 路径

C# path to certain parent directory

有没有从当前路径获取某个父目录路径的捷径。

我有这样的路径:

"c:\users\userName\documents\visual studio 2013\Projects\SolutionName\ProjectName\bin\Debug"

我想获取 'SolutionName' 目录的路径,像这样

"c:\users\userName\documents\visual studio 2013\Projects\SolutionName"

我需要它,因为我正在文件夹

中存储一些数据
"c:\users\userName\documents\visual studio 2013\Projects\SolutionName\DataFolder"

我需要从我的解决方案中的不同项目访问它。

谢谢大家,我完成了

public static string GetParent( string parentName,string FileName)
    {
        var dir = new DirectoryInfo(System.IO.Directory.GetCurrentDirectory());

        while (dir.Parent.Name != parentName)
        {
            dir = dir.Parent;
        }
        return dir.Parent.FullName+"\Data\"+FileName;
    }

我接受了 Callum Bradbury 的回答,因为我只是将其更改为不可递归。

如果您想要一个干净的解决方案,请按照以下步骤操作

  1. 在您解决方案的每个项目中尝试更改您的 Build Output Path

  2. 你必须让你的所有路径都像这样

     "..\datafolder\File.txt"
    

这里有一些解决方案:

string dataFolder = Directory.GetCurrentDirectory() + "..\..\..\DataFolder"

string dataFolder = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) + "\DataFolder";

您还可以查看此 link 以获取查找当前路径的最佳方法,似乎 GetCurrentDirectory 可能不是最佳解决方案:get path for my .exe

您可以使用 DirectoryInfo class 通过一些迭代函数相对轻松地完成此操作。

    public string GetParent(string path, string parentName)
    {
        var dir = new DirectoryInfo(path);

        if (dir.Parent == null)
        {
            return null;
        }

        if (dir.Parent.Name == parentName)
        {
            return dir.Parent.FullName;
        }

        return this.GetParent(dir.Parent.FullName, parentName);
    }

您要找的是:

var curd = Environment.CurrentDirectory; 
// this will give you current directory for eg: if you are in "Debug" mode then "c:\users\userName\documents\visual studio 2013\Projects\SolutionName\ProjectName\bin\Debug" and if you are in "Release" mode then "c:\users\userName\documents\visual studio 2013\Projects\SolutionName\ProjectName\bin\Release"

现在你想要的是你的路径名,直到 SolutionName 文件夹,它是 3 级别,所以你所要做的就是附加到上面的行 @"\..\..\..\"

var curd = Environment.CurrentDirectory + @"\..\..\..\";

大功告成。

Key 您要从 current directory 上升的级别数量与您需要追加的 @"\..\" 数量相同。

使用您需要的路径创建注册码

Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Names");
key.SetValue("Name", "Isabella");
key.Close();

创建后,可以在Microsoft.Win32命名空间

下使用RegistryKeyclass