3

是否有一种从当前路径获取某些父目录路径的捷径。

我有这样的路径:

"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 的回答,因为我只是将其更改为不递归。

4

5 回答 5

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);
    }
于 2015-04-17T09:50:14.983 回答
1

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

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

    在此处输入图像描述

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

     "..\\datafolder\File.txt"
    
于 2015-04-17T09:34:22.917 回答
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升级,所以你要做的就是附加到上面的行@"\..\..\..\"

IE

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

你就完成了。

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

于 2015-04-17T10:03:13.497 回答
0

以下是一些解决方案:

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

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

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

于 2015-04-17T09:41:35.037 回答
0

使用您需要的路径创建一个 reg 键

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

创建后可以使用命名空间RegistryKey下的类Microsoft.Win32

于 2015-04-17T10:14:19.367 回答