Oto co używam. Bardzo ładnie tworzy elipsę na środku ścieżki, a także pozwala na dowolną długość lub ogranicznik.
Uwaga jest to metoda rozszerzenie, dzięki czemu można go używać tak jak `"c:\path\file.foo".EllipsisString()
wątpię trzeba pętli while, w rzeczywistości prawdopodobnie nie byłem po prostu zbyt zajęty, aby przetestować właściwie
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();
}
Jest to również dobrze odpowiedział na http://stackoverflow.com/questions/8360360/c-sharp-function-to-shrink-file-path-to-be-more-human-readble –