2

如果我要编写这个方法,在 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

4 回答 4

6

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

  1. GetFileName检查路径是否包含无效字符 ( System.IO.Path.CheckInvalidPathChars )。
  2. 之后,它使用System.IO.Path.DirectorySeparatorCharSystem.IO.Path.AltDirectorySeparatorCharSystem.IO.Path.VolumeSeparatoChar分割您的路径。
  3. 然后才返回文件名。
于 2013-03-01T22:19:00.990 回答
4
  • 根本没有斜线的路径。
  • 有反斜杠但没有正斜杠的路径。
  • 有朝一日可能会使用非 Windows 文件名约定运行 .NET 的替代系统。
于 2013-03-01T22:06:35.697 回答
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;
}
于 2013-03-01T22:08:30.503 回答
1

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

由于这个系统方法看起来简单而简短,我会去 ac# decompiler 看看它的内部。

Dis# - 著名的商业版本,提供试用版:http: //www.netdecompiler.com/

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

于 2013-03-01T22:06:33.603 回答