中间有省略号的长路径

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

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

是否有标准function或扩展方法?

没有标准function或扩展方法,因此您必须自己滚动。

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

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

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

注意这是一个扩展方法,所以你可以使用它像`"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 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(); } 

这很有效

  // 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;