我想截断一条特定长度的长路径。但是,我希望将省略号放在中间。
例如:\\my\long\path\is\really\long\and\it\needs\to\be\truncated
应该变成(截断为35个字符):\\my\long\path\is...to\be\truncated
是否有可用的标准功能或扩展方法?
答案 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;