在中间用省略号的长路径

时间:2011-12-06 16:12:28

标签: c#

我想截断一条特定长度的长路径。但是,我希望将省略号放在中间。

例如:\\my\long\path\is\really\long\and\it\needs\to\be\truncated 应该变成(截断为35个字符):\\my\long\path\is...to\be\truncated

是否有可用的标准功能或扩展方法?

3 个答案:

答案 0 :(得分:6)

没有标准功能或扩展方法,因此您必须自己动手。

检查长度并使用类似的东西

var truncated = ts.Substring(0, 16) + "..." + ts.Substring((ts.Length - 16), 16);

答案 1 :(得分:6)

这是我使用的。它非常好地在路径中间创建省略号,它还允许您指定任何长度或分隔符。

请注意,这是一种扩展方法,因此您可以像`"c:\path\file.foo".EllipsisString()

一样使用它

我怀疑你需要while循环,事实上你可能没有,我只是太忙而无法正常测试

    public static string EllipsisString(this string rawString, int maxLength = 30, char delimiter = '\\')
    {
        maxLength -= 3; //account for delimiter spacing

        if (rawString.Length <= maxLength)
        {
            return rawString;
        }

        string final = rawString;
        List<string> parts;

        int loops = 0;
        while (loops++ < 100)
        {
            parts = rawString.Split(delimiter).ToList();
            parts.RemoveRange(parts.Count - 1 - loops, loops);
            if (parts.Count == 1)
            {
                return parts.Last();
            }

            parts.Insert(parts.Count - 1, "...");
            final = string.Join(delimiter.ToString(), parts);
            if (final.Length < maxLength)
            {
                return final;
            }
        }

        return rawString.Split(delimiter).ToList().Last();
    }

答案 2 :(得分:2)

这有效

    // Specify max width of resulting file name
    const int MAX_WIDTH = 50;

    // Specify long file name
    string fileName = @"A:\LongPath\CanBe\AnyPathYou\SpecifyHere.txt";

    // Find last '\' character
    int i = fileName.LastIndexOf('\\');

    string tokenRight = fileName.Substring(i, fileName.Length - i);
    string tokenCenter = @"\...";
    string tokenLeft = fileName.Substring(0, MAX_WIDTH-(tokenRight.Length + tokenCenter.Length));

    string shortFileName = tokenLeft + tokenCenter + tokenRight;