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

也就是说,给定c:\foobar.txt,我想要c:\foo\bar.txt.

给定c:\foo..\bar.txt,我需要ERROR或c:\foo\bar.txt(因此我不能直接使用Path.Combine()).同样,对于c:\foobar/baz.txt,我需要错误或c:\foo\baz.txt(而不是c:\foo\bar\baz.txt).

我意识到,我可以判断文件名是否不包含‘\’或‘/’,但是这样就足够了吗?如果没有,正确的支票是什么?

推荐答案

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

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

.net相关问答推荐

ASP.NET核心最小API必须以正斜杠开头吗?

从窗体中移除另一个控件中引用的控件时获取设计时通知

EGC / 文本元素上的 .NET String.Split

在 .NET 中使用 AES 解密时缺少后半字节

使用 Task.WhenAll 但需要跟踪每个单独的 Task 的成功

我应该创建一个 DateRange 对象吗?

如何从控制台应用程序中的 Task.WaitAll() 获取返回值?

是否可以模拟 .NET HttpWebResponse?

泛型方法是如何、何时、何地具体化的?

在 JavaScript 中使用 String.Format?

C# 相当于 Java 的 <?在泛型中扩展 Base>

如何授予所有用户对我的应用程序创建的文件的完全权限?

从 List 到数组 T[] 的转换

WCF反序列化如何在不调用构造函数的情况下实例化对象?

测试没有预期的异常

为什么 C# 不推断我的泛型类型?

string.Empty vs null.你用哪一个?

让 String.Replace 只打整个单词的方法

为什么 double.NaN 不等于自身?

安装带有恢复操作的 Windows 服务以重新启动