某个父目录的C#路径

时间:2015-04-17 09:26:16

标签: c# .net system.io.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的回答,因为我只是改变它而不是递归。

5 个答案:

答案 0 :(得分:5)

您可以使用DirectoryInfo类通过一点迭代功能相对轻松地完成此任务。

    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);
    }

答案 1 :(得分:1)

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

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

    enter image description here

  2. 你必须让你所有的路径相对于这样的

     "..\\datafolder\File.txt"
    

答案 2 :(得分:1)

您正在寻找的是:

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获得与您需要追加的@"\..\"相同数量的等级数。

答案 3 :(得分:0)

以下是一些解决方案:

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

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

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

答案 4 :(得分:0)

使用您需要的路径创建一个注册密钥

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

创建后,您可以在RegistryKey命名空间

下使用Microsoft.Win32