是否有一种从当前路径获取某个父目录路径的简短方法。
我有这样的道路:
"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的回答,因为我只是改变它而不是递归。
答案 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)
如果您想要一个干净的解决方案,请按照以下步骤操作
都会尝试更改Build
Output Path
你必须让你所有的路径相对于这样的
"..\\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
类