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

时间:2009-06-26 09:09:56

标签: c# .net path filenames

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

也就是说,考虑到c:\foobar.txt,我想要c:\foo\bar.txt

鉴于c:\foo..\bar.txt,我想要一个错误或c:\foo\bar.txt(所以我不能直接使用Path.Combine())。同样地,对于c:\foobar/baz.txt,我想要一个错误或c:\foo\baz.txt(不是c:\foo\bar\baz.txt)。

我意识到,我可以检查文件名是否包含'\'或'/',但这还够吗?如果没有,那么正确的检查是什么?

3 个答案:

答案 0 :(得分:95)

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

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));

答案 1 :(得分:17)

您可以使用:

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

或者,要跳过\(未经过测试,也许Path.GetFileName会自动处理)

Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\\")))

答案 2 :(得分:1)

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

在我看来,微软搞砸了!这可以让你彻底打开用户黑客整个文件系统。请注意,请阅读细则!如果您要组合路径,请使用:var newPath = path1 + @"\" + path2;更简单且没有意外结果......