Я столкнулся с этой проблемой сам, и а не добавьте Систему. Веб-блок к моему проекту, я записал класс для кодирования/декодирования URL (его довольно простое, и я сделал некоторое тестирование, но не много). Я включал исходный код ниже.: оставьте комментарий наверху при многократном использовании этого не обвиняйте меня, если он повреждается, извлеките уроки из кода.
''' <summary>
''' URL encoding class. Note: use at your own risk.
''' Written by: Ian Hopkins (http://www.lucidhelix.com)
''' Date: 2008-Dec-23
''' </summary>
Public Class UrlHelper
Public Shared Function Encode(ByVal str As String) As String
Dim charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"))
Dim pattern = String.Format("[^{0}]", charClass)
Dim evaluator As New MatchEvaluator(AddressOf EncodeEvaluator)
' replace the encoded characters
Return Regex.Replace(str, pattern, evaluator)
End Function
Private Shared Function EncodeEvaluator(ByVal match As Match) As String
' Replace the " "s with "+"s
If (match.Value = " ") Then
Return "+"
End If
Return String.Format("%{0:X2}", Convert.ToInt32(match.Value.Chars(0)))
End Function
Public Shared Function Decode(ByVal str As String) As String
Dim evaluator As New MatchEvaluator(AddressOf DecodeEvaluator)
' Replace the "+"s with " "s
str = str.Replace("+"c, " "c)
' Replace the encoded characters
Return Regex.Replace(str, "%[0-9a-zA-Z][0-9a-zA-Z]", evaluator)
End Function
Private Shared Function DecodeEvaluator(ByVal match As Match) As String
Return "" + Convert.ToChar(Integer.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber))
End Function
End Class
Вы думаете о StringTrimming.EllipsisPath
константа перечисления, которая может использоваться с StringFormat
до рисовать обрезанный путь с помощью Graphics.DrawString
. Однако, .
Из этого сообщения в блоге Coding Horror о сокращении длинных путей к файлам есть вызов Windows API PathCompactPathEx
, который вы можете использовать.
Я не знаю метода, чтобы сделать это автоматически, но вы легко можете создать метод, в котором iether использует Substring () и LastIndexOf ("\") или System.IO.Path. GetFileName (), чтобы получить только имя файла, а затем добавить точку.
Как насчет:
string longPath = @"c:\somewhere\myfile.txt";
string shortPath = @"..\" + Path.GetFileName(longPath);
Здесь я нашел простой в использовании класс, производный от TextBox: EllipsisTextBox , который инкапсулирует StringTrimming.EllipsisPath. У меня работает!