長いパスを特定の長さに切り捨てたい。しかし、私は中に省略記号を入れたい。例えば途中に省略記号がある長いパス
:\\my\long\path\is\really\long\and\it\needs\to\be\truncated
は(35文字に切り捨て)となるべきである:\\my\long\path\is...to\be\truncated
標準機能または拡張方法はありますか?
長いパスを特定の長さに切り捨てたい。しかし、私は中に省略記号を入れたい。例えば途中に省略記号がある長いパス
:\\my\long\path\is\really\long\and\it\needs\to\be\truncated
は(35文字に切り捨て)となるべきである:\\my\long\path\is...to\be\truncated
標準機能または拡張方法はありますか?
標準の機能や拡張方法はありませんので、自分でロールする必要があります。
長さを確認してください。
var truncated = ts.Substring(0, 16) + "..." + ts.Substring((ts.Length - 16), 16);
受け入れられました。私はそれをやっている同様のコードを持って、ちょうどそれをよりきれいにしたい。 – Vivek
これは、ここで
// 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;
の作品、私が使用するものです。パスの真ん中に省略記号を作成し、長さや区切り文字を指定することもできます。
注これは、あなたがそう`"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();
}
をテストすることがあまりにも忙しかったしません。
これはまた、http://stackoverflow.com/questions/8360360/c-sharp-function-to-shrink-file-path-to-be-more-human-readbleでもよく尋ねられます –