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

Ras*_*ber 62 .net c# filenames path

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

也就是说,给予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).

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

Luk*_*keH 99

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

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

或者,如果您只是想静静地更正"坏"文件名而不抛出异常:

string combined = Path.Combine(dir, Path.GetFileName(fileName));
Run Code Online (Sandbox Code Playgroud)

  • 对于那些不太熟悉框架的人,你需要在文件中使用`System.IO;`来调用`Path`. (12认同)
  • 注意:如果需要,Path.Combine通常会在每个路径之间添加一个分隔符.但是,Path.Combine("C:","file.txt")返回"C:file.txt",这不是有效路径. (4认同)
  • 请注意,如果其任一参数为"null",则"Path.Combine"将抛出一个"ArgumentNullException".你**可以**将空字符串传递给任一参数 (3认同)

GvS*_*GvS 17

你可以使用:

Path.Combine(folder, Path.GetFileName(fileName))
Run Code Online (Sandbox Code Playgroud)

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

Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\\")))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!仅供参考:不需要替换. (5认同)