Path.GetFileName有多简单?

时间:2013-03-01 22:04:00

标签: c# asp.net webmatrix asp.net-webpages

在C#.net中,如果我要写这个方法:

public static string returnFileNameOnly(string returnString)
{
    string val = returnString.Substring(returnString.LastIndexOf("/"));

    return val;
}

我几乎只是重写了Path.GetFileName吗?或者还有更多呢?据我所知,除非用户使用的是Internet Explorer,否则Path.GetFileName(fileVariable.FileName)fileVariable.FileName会返回相同的内容(虽然我只在IE,Chrome和Firefox上试过)。

不确定那个方法到底是不是真的。

----------------对于那些好奇的人-----------------------

我问,因为在我学习Path.GetFileName方法之前,我已经使用了很久以前在网站上使用的方法,但我不确定是否应该更改它或者不

4 个答案:

答案 0 :(得分:6)

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

  1. GetFileName 检查路径是否包含无效字符( System.IO.Path.CheckInvalidPathChars )。
  2. 之后,它会使用 System.IO.Path.DirectorySeparatorChar System.IO.Path.AltDirectorySeparatorChar System.IO.Path.VolumeSeparatoChar拆分路径
  3. 然后才返回文件名。

答案 1 :(得分:4)

  • 根本没有斜线的路径。
  • 具有反斜杠但没有常规斜线的路径。
  • 可能有一天会使用非Windows文件名约定运行.NET的备用系统。

答案 2 :(得分:4)

你总是可以四处寻找(共享源码|转子|单声道|反射器| 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;
}

答案 3 :(得分:1)

系统方法可能更复杂,因为您可以将/和\作为目录分隔符。但我肯定会说:如果有效,请不要尝试修复它!

由于这个系统方法似乎简单而简短,我会去c#反编译器观察它的内部。

Dis# - 众所周知的商业版,试用版可用:http://www.netdecompiler.com/

Jetbrains dotPeek - 另一个着名的免费:http://www.jetbrains.com/decompiler/