Mas*_*ian 67 c# filesystems directory
我使用此代码来查找调试目录
public string str_directory = Environment.CurrentDirectory.ToString();
Run Code Online (Sandbox Code Playgroud)
"C:\\Users\\Masoud\\Documents\\Visual Studio 2008\\Projects\\MyProj\\MyProj\\bin\\Debug"
如何找到如下所示的父文件夹?
"C:\\Users\\Masoud\\Documents\\Visual Studio 2008\\Projects\\MyProj\\MyProj"
小智 108
您可以使用System.IO.Directory.GetParent()来检索给定目录的父目录.
bil*_*nkc 43
string parent = System.IO.Directory.GetParent(str_directory).FullName;
Run Code Online (Sandbox Code Playgroud)
见BOL
Pie*_*ant 28
如果附加..\..到现有路径,操作系统将正确浏览grand-parent文件夹.
那应该做的工作:
System.IO.Path.Combine("C:\\Users\\Masoud\\Documents\\Visual Studio 2008\\Projects\\MyProj\\MyProj\\bin\\Debug", @"..\..");
Run Code Online (Sandbox Code Playgroud)
如果浏览该路径,则将浏览grand-parent目录.
Tim*_*imo 14
我发现变体System.IO.Path.Combine(myPath, "..")是最容易和最可靠的.更重要的是,如果northben说的是真的,那么如果有一个尾随斜杠,则GetParent需要额外的调用.对我来说,这是不可靠的.
Path.Combine确保你永远不会出现斜线错误.
..行为与Windows中的其他任何地方完全相同.您可以\..在cmd或explorer中添加任意数量的路径,它的行为与我在下面描述的完全相同.
一些基本..行为:
..则将其关闭:Path.Combine(@"D:\Grandparent\Parent\Child.txt", "..") => D:\Grandparent\Parent\
..则会向上移动一个级别:Path.Combine(@"D:\Grandparent\Parent\", "..") => D:\Grandparent\
..\.. 遵循相同的规则,连续两次:Path.Combine(@"D:\Grandparent\Parent\Child.txt", @"..\..")=> D:\Grandparent\
Path.Combine(@"D:\Grandparent\Parent\", @"..\..")=>D:\
Path.Combine(@"D:\Grandparent\Parent\Child.txt", "..", "..")=> D:\Grandparent\
Path.Combine(@"D:\Grandparent\Parent\", "..", "..")=>D:\
Jay*_*ggs 11
要获取"祖父母"目录,请两次调用Directory.GetParent():
var gparent = Directory.GetParent(Directory.GetParent(str_directory).ToString());
Run Code Online (Sandbox Code Playgroud)
像这样:
System.IO.DirectoryInfo myDirectory = new DirectoryInfo(Environment.CurrentDirectory);
string parentDirectory = myDirectory.Parent.FullName;
Run Code Online (Sandbox Code Playgroud)
祝好运!
Directory.GetParent可能是一个更好的答案,但为了完整性,有一个不同的方法,它接受字符串并返回字符串:Path.GetDirectoryName.
string parent = System.IO.Path.GetDirectoryName(str_directory);
Run Code Online (Sandbox Code Playgroud)
没有人提供一种可以跨表单工作的解决方案。我知道这不是特别要求,但我在 linux 环境中工作,在该环境中,大多数解决方案(在我发布此内容时)都会提供错误。
硬编码路径分隔符(以及其他东西)将在 Windows 系统之外的任何系统中出错。
在我原来的解决方案中,我使用了:
char filesep = Path.DirectorySeparatorChar;
string datapath = $"..{filesep}..{filesep}";
Run Code Online (Sandbox Code Playgroud)
但是在看到这里的一些答案后,我将其调整为:
string datapath = Directory.GetParent(Directory.GetParent(Directory.GetCurrentDirectory()).FullName).FullName;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107473 次 |
| 最近记录: |