Path.GetFileName有多简单
本文关键字:简单 GetFileName Path | 更新日期: 2023-09-27 18:01:52
在c# .net中,如果我要写这个方法:
public static string returnFileNameOnly(string returnString)
{
string val = returnString.Substring(returnString.LastIndexOf("/"));
return val;
}
我会重写Path.GetFileName吗?或者还有更多的原因?据我所知,Path.GetFileName(fileVariable.FileName)
和fileVariable.FileName
返回相同的东西,除非用户使用Internet Explorer(尽管我只在IE, Chrome和Firefox上尝试过)。
我不确定这是不是那个方法的全部,真的。
---------------- 对于那些好奇 -----------------------
我问这个问题是因为很久以前,在我学习Path.GetFileName
方法之前,我在一个网站上使用了与我上面写的方法非常相似的方法,我不确定我是否应该费心更改它。
根据mscrolib disasm,我可以说GetFileName并不比您的实现复杂得多。GetFileName执行以下操作。
- GetFileName检查path是否包含无效字符(System.IO.Path.CheckInvalidPathChars)。
- 之后,它使用System.IO.Path分割你的路径。DirectorySeparatorChar 、 System.IO.Path。AltDirectorySeparatorChar and system . io . path . volumesseparatorchar .
- 然后返回文件名。
- 没有斜杠的路径。
- 有反斜杠但没有普通斜杠的路径。
- 可能有一天使用非windows文件名约定运行。net的备用系统。
你可以到处看看(共享源代码| Rotor | Mono | Reflector | dotPeek):
public static string GetFileName(string path)
{
if (path != null)
{
CheckInvalidPathChars(path);
int length = path.Length;
int num2 = length;
while (--num2 >= 0)
{
char ch = path[num2];
if (((ch == DirectorySeparatorChar) ||
(ch == AltDirectorySeparatorChar)) ||
(ch == VolumeSeparatorChar))
{
return path.Substring(num2 + 1, (length - num2) - 1);
}
}
}
return path;
}
system方法可能更复杂,因为可以同时使用/和'作为目录分隔符。但我肯定会说:如果它工作,不要试图修复它!
由于这个系统方法看起来简单而简短,我建议使用c#反编译器来观察它的内部结构。
Dis# -著名的商业版,试用版:http://www.netdecompiler.com/
Jetbrains dotPeek -另一个著名的,免费的:http://www.jetbrains.com/decompiler/