如何浏览几个文件夹?

时间:2013-02-15 16:50:04

标签: c# .net console-application

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

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

11 个答案:

答案 0 :(得分:169)

其他简单的方法是:

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

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

答案 1 :(得分:20)

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

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

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

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

如果你想要folder2路径,那么你可以通过

获取目录
string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString();

然后您将获得路径为c:\ folder1 \ folder2 \

答案 2 :(得分:7)

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

您也可以使用Path课程。

C# Path class

答案 3 :(得分:5)

这对我来说最有效:

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

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

答案 4 :(得分:3)

以下方法搜索以应用程序启动路径(* .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;
}

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

答案 5 :(得分:3)

C#

string upTwoDir = Path.GetFullPath(Path.Combine(System.AppContext.BaseDirectory, @"..\..\"));

答案 6 :(得分:2)

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

答案 7 :(得分:1)

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

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

你可以这样称呼它:

String path = this.GetParents(4, currentpath);

答案 8 :(得分:1)

这可能会有所帮助

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../../")) + "Orders.xml";
if (File.Exists(parentOfStartupPath))
{
    // file found
}

答案 9 :(得分:0)

如果您知道要导航到的文件夹,请找到它的索引,然后查找子串。

{{1}}

答案 10 :(得分:0)

我有一些虚拟目录,不能使用Directory方法。因此,我为感兴趣的人制作了一个简单的split / join函数。虽然不安全。

var splitResult = filePath.Split(new[] {'/', '\\'}, StringSplitOptions.RemoveEmptyEntries);
var newFilePath = Path.Combine(filePath.Take(splitResult.Length - 1).ToArray());

因此,如果您想向上移动4,则只需将1更改为4,并添加一些检查以避免异常。

相关问题