如何浏览几个文件夹?

dev*_*747 100 .net c# console-application

一种选择是做几次System.IO.Directory.GetParent().是否有更优雅的方式从执行程序集所在的位置移动几个文件夹?

我想要做的是找到一个文本文件,它位于应用程序文件夹上方的一个文件夹中.但是程序集本身位于bin中,这是应用程序文件夹中的几个文件夹.

A-S*_*ani 186

其他简单的方法是这样做:

string path = @"C:\Folder1\Folder2\Folder3\Folder4";
string newPath = Path.GetFullPath(Path.Combine(path, @"..\..\"));
Run Code Online (Sandbox Code Playgroud)

注意这有两个级别.结果将是: newPath = @"C:\Folder1\Folder2\";

  • 无论如何,当您手动添加反斜杠时,使用`Path.Combine`毫无意义。考虑改用`Path.Combine(path,“ ..”,“ ..”)`。 (7认同)
  • @AXMIM 使用 GetFullPath 将返回绝对路径,这在大多数情况下都会有所不同。尝试在CodeBunk中输入上面的代码,如果不使用GetFullPath,结果会有所不同,并且在大多数情况下可能会导致错误。 (3认同)
  • 您还可以将它们组合起来(可能会更好): `Path.GetFullPath(Path.Combine(path, "..", ".."))` (2认同)

小智 26

如果c:\ folder1\folder2\folder3\bin是路径,则以下代码将返回bin文件夹的路径基础文件夹

//string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString());

string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString();
Run Code Online (Sandbox Code Playgroud)

即C:\ folder1中\文件夹2\folder3

如果你想要folder2路径,那么你可以通过获取目录

string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString();
Run Code Online (Sandbox Code Playgroud)

那么你将获得路径为c:\ folder1\folder2 \


Dot*_*ser 10

您可以使用..\path上一级,..\..\path从路径上一级。

您也可以使用Path类。

C#Path类


Oli*_*bes 6

以下方法搜索以应用程序启动路径(*.exe 文件夹)开头的文件。如果在那里找不到该文件,则会搜索父文件夹,直到找到该文件或到达根文件夹。null如果未找到文件则返回。

public static FileInfo FindApplicationFile(string fileName)
{
    string startPath = Path.Combine(Application.StartupPath, fileName);
    FileInfo file = new FileInfo(startPath);
    while (!file.Exists) {
        if (file.Directory.Parent == null) {
            return null;
        }
        DirectoryInfo parentDir = file.Directory.Parent;
        file = new FileInfo(Path.Combine(parentDir.FullName, file.Name));
    }
    return file;
}
Run Code Online (Sandbox Code Playgroud)

注意:Application.StartupPath通常用于WinForms应用程序,但它也适用于控制台应用程序;但是,您必须设置对System.Windows.Forms程序集的引用。如果您愿意,可以替换Application.StartupPath为。
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

我使用这个策略来查找配置和资源文件。这允许我通过将它们放置在公共父文件夹中来为多个应用程序或应用程序的调试和发布版本共享它们。


CR4*_*G14 5

如果您想声明级别数并将其放入函数中,也许您可​​以使用函数?

private String GetParents(Int32 noOfLevels, String currentpath)
{
     String path = "";
     for(int i=0; i< noOfLevels; i++)
     {
         path += @"..\";
     }
     path += currentpath;
     return path;
}
Run Code Online (Sandbox Code Playgroud)

你可以这样称呼它:

String path = this.GetParents(4, currentpath);
Run Code Online (Sandbox Code Playgroud)


Jac*_*cco 5

这对我最有用:

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));

获得"正确"路径不是问题,添加'../'显然会这样做,但在此之后,给定的字符串不可用,因为它只会在末尾添加'../'.它周围Path.GetFullPath()将为您提供绝对路径,使其可用.


mob*_*rme 5

C#

string upTwoDir = Path.GetFullPath(Path.Combine(System.AppContext.BaseDirectory, @"..\..\"));
Run Code Online (Sandbox Code Playgroud)


R M*_*hed 5

public static string AppRootDirectory()
        {
            string _BaseDirectory = AppDomain.CurrentDomain.BaseDirectory;
            return Path.GetFullPath(Path.Combine(_BaseDirectory, @"..\..\"));
        }
Run Code Online (Sandbox Code Playgroud)