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方法之前,我在一个网站上使用了与我上面写的方法非常相似的方法,我不确定我是否应该费心更改它。

Path.GetFileName有多简单

根据mscrolib disasm,我可以说GetFileName并不比您的实现复杂得多。GetFileName执行以下操作。

  1. GetFileName检查path是否包含无效字符(System.IO.Path.CheckInvalidPathChars)。
  2. 之后,它使用System.IO.Path分割你的路径。DirectorySeparatorChar System.IO.Path。AltDirectorySeparatorChar and system . io . path . volumesseparatorchar .
  3. 然后返回文件名。
  • 没有斜杠的路径。
  • 有反斜杠但没有普通斜杠的路径。
  • 可能有一天使用非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/