代码之家  ›  专栏  ›  技术社区  ›  Rasmus Faber

在C#/.NET中,组合路径和文件名的最佳方式是什么?

  •  56
  • Rasmus Faber  · 技术社区  · 17 年前

    将路径与文件名组合的最佳方式是什么?

    也就是说 c:\foo bar.txt c:\foo\bar.txt .

    鉴于 c:\foo ..\bar.txt ,我想要一个错误或 (所以我不能使用 Path.Combine() c:\foo bar/baz.txt ,我想要一个错误或 c:\foo\baz.txt (不是 c:\foo\bar\baz.txt

    我意识到,我可以检查文件名是否不包含“\”或“/”,但这足够了吗?如果不是,正确的检查是什么?

    3 回复  |  直到 10 年前
        1
  •  120
  •   LukeH    17 年前

    如果希望“坏”文件名生成错误:

    if (Path.GetFileName(fileName) != fileName)
    {
        throw new Exception("'fileName' is invalid!");
    }
    string combined = Path.Combine(dir, fileName);
    

    或者,如果您只想静默地更正“坏”文件名而不引发异常:

    string combined = Path.Combine(dir, Path.GetFileName(fileName));
    
        2
  •  19
  •   GvS    17 年前

    您可以使用:

    Path.Combine(folder, Path.GetFileName(fileName))
    

    或者,跳过\(未测试,可能Path.GetFileName会自动处理)

    Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\\")))
    
        3
  •  2
  •   Donnelle    10 年前

    请注意,当您使用 Path.Combine(arg1, arg2) -如果用户为arg2输入完全限定的文件路径,它将忽略arg1,并使用arg2作为路径。

    在我看来,微软搞砸了!这可能会让用户对整个文件系统进行黑客攻击。请注意,请阅读精美的印刷品!如果要组合路径,请使用: var newPath = path1 + @"\" + path2; 更简单,没有意外的结果。。。

    推荐文章