【问题标题】:C# path to certain parent directory特定父目录的 C# 路径
【发布时间】:2015-04-17 09:26:15
【问题描述】:

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

我有这样的路径:

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

【问题讨论】:

  • 如果您只是尝试访问文件夹(而不是显示路径),您可以简单地将“..”附加到完整路径:“c:\\users\\userName\\文档\\visual studio 2013\\Projects\\SolutionName\\DataFolder\\..\\"

标签: c# .net system.io.directory


【解决方案1】:

您可以使用 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);
    }

【讨论】:

  • 谢谢,这是我一直在寻找的,但我改变了它,所以它不会是递归的。
  • 如果您的更改 parentName 不是当前目录的父目录,您将获得空引用异常。不过,这是否是一个问题取决于您。很高兴我能帮忙
【解决方案2】:

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

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

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

     "..\\datafolder\File.txt"
    

【讨论】:

    【解决方案3】:

    您正在寻找的是:

    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 上升的级别数与你需要追加的@"\..\" 相同的数量。

    【讨论】:

      【解决方案4】:

      这里有一些解决方案:

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

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

      【讨论】:

      • 我必须从不同的项目访问相同的文件夹,这些文件夹可以位于不同的文件夹中,但都将放在“SolutionFolder”中,但它们可以位于不同的级别。
      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-12-06
        • 2010-11-21
        • 2015-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多