2011-12-06 33 views
6

Tôi muốn cắt ngắn đường dẫn dài đến độ dài cụ thể. Tuy nhiên, tôi muốn có dấu chấm lửng ở giữa.Đường dẫn dài với dấu chấm lửng ở giữa

ví dụ: \\my\long\path\is\really\long\and\it\needs\to\be\truncated nên trở thành (cắt ngắn đến 35 ký tự): \\my\long\path\is...to\be\truncated

Có một chức năng tiêu chuẩn hoặc phương pháp khuyến nông có sẵn?

+0

Điều này cũng được trả lời trong http://stackoverflow.com/questions/8360360/c-sharp-function-to-shrink-file-path-to-be-more-human-readble –

Trả lời

4

Không có chức năng hoặc phương pháp mở rộng chuẩn, vì vậy bạn sẽ phải cuộn của riêng bạn.

Kiểm tra độ dài và sử dụng thứ gì đó như;

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

Đã chấp nhận. Tôi có mã tương tự làm điều đó, chỉ muốn làm cho nó sạch hơn. – Vivek

1

này hoạt động

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

Dưới đây là những gì tôi sử dụng. Nó rất độc đáo tạo ra dấu ba chấm ở giữa một con đường và nó cũng cho phép bạn speciy bất kỳ chiều dài hoặc dấu phân cách.

Lưu ý đây là một phương pháp mở rộng, do đó bạn có thể sử dụng nó như vậy `"c:\path\file.foo".EllipsisString()

tôi nghi ngờ bạn cần vòng lặp while, trên thực tế có thể bạn không, tôi đã quá bận rộn để kiểm tra đúng

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(); 
    } 
Các vấn đề liên quan