特定父目录的 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 的回答,因为我只是将其更改为不可递归。
如果您想要一个干净的解决方案,请按照以下步骤操作
在您解决方案的每个项目中尝试更改您的 Build
Output Path
你必须让你的所有路径都像这样
"..\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
命名空间
下使用RegistryKey
class
有没有从当前路径获取某个父目录路径的捷径。
我有这样的路径:
"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 的回答,因为我只是将其更改为不可递归。
如果您想要一个干净的解决方案,请按照以下步骤操作
在您解决方案的每个项目中尝试更改您的
Build
Output Path
你必须让你的所有路径都像这样
"..\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
命名空间
RegistryKey
class