使用Path.Combine导航目录

时间:2014-08-20 07:22:38

标签: c# .net system.io.directory

我正在尝试上几个目录,然后进入输入文件夹......

我试过这个

var path = Path.Combine(Directory.GetCurrentDirectory(), @"..\\..\\..\\Input\\" + filename);

但路径的价值最终是......

C:\\Users\user1\\Desktop\\ToSend\\test\\reverser\\Reverser\\bin\\Debug\\..\\\\..\\\\..\\\\Input\\\\limerick.txt

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

你需要获得绝对而不是相对路径。因此,您必须使用 GetFullPath()而不是组合()

检查this

答案 1 :(得分:0)

您可以使用DirectoryInfo.Parent属性。

答案 2 :(得分:0)

首先,当使用带字符串的@时,不需要转义\字符,因此只需使用单个\ slash就可以避免结果中的双转义斜杠。

关于路径问题:这取决于你想做什么。如果结果字符串用于使用System.IO.File.*执行某些文件操作,或者使用StreamReader / StreamWriter从文件写入/读取,则操作本身将负责处理目录时检测\..\,所以不用担心!

答案 3 :(得分:0)

假设您知道要从路径中删除多少级别:

public string DirectoryGOUp(string path, int levelCount) {
    if(string.IsNullOrEmpty(path) || levelCount < 1)
        return path;

    string upperLevel = System.IO.Path.GetDirectoryName(path);

    if(--levelCount > 0)
        return DirectoryGOUp(upperLevel, levelCount);

    return upperLevel;
}

然后叫它:

  

var newPath = DirectoryGOUp(Directory.GetCurrentDirectory(),3);   newPath = Path.Combine(newPath,@“Input \”+ filename);

答案 4 :(得分:0)

扩展lamloumi的答案并清理代码:

var path = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..\..\Input", filename));

应生成文件的绝对路径。