[DllImport("kernel32.dll")]
static extern uint GetShortPathName(string lpszLongPath,
[Out] StringBuilder lpszShortPath, uint cchBuffer);
<DllImport("kernel32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function GetShortPathName(ByVal longPath As String, _
<MarshalAs(UnmanagedType.LPTStr)> ByVal ShortPath As StringBuilder, _
<MarshalAs(UnmanagedType.U4)> ByVal bufferSize As Integer) As Integer
End Function
None.
None.
Please add some!
/// <summary>
/// The ToShortPathName function retrieves the short path from of a specified long input path
/// </summary>
/// <param name="longName">The long name path</param>
/// <returns>A short name path string</returns>
/// <remarks>The file must exist for this to work.</remarks>
public static string ToShortPathName(string longName)
{
StringBuilder shortNameBuffer = new StringBuilder(256);
uint bufferSize = (uint)shortNameBuffer.Capacity;
uint result = GetShortPathName(longName, shortNameBuffer, bufferSize);
if (result == 0)
{
// Failed to convert to a short name. Does the file exist?
}
return shortNameBuffer.ToString();
}
/// KSG Comments:
/// Unlike the sample above I am check for the return code in the event of an error
Public Class Interop
<DllImport("kernel32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function GetShortPathName(ByVal longPath As String, <MarshalAs(UnmanagedType.LPTStr)> ByVal ShortPath As StringBuilder, <MarshalAs(UnmanagedType.U4)> ByVal bufferSize As Integer) As Integer
End Function
End Class
Private Sub TestShortPath()
Dim sb As New StringBuilder(1024)
Dim longPath As String
Dim sFileName As String
longPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
Dim retVal As Integer = Interop.GetShortPathName(longPath, sb, 1024)
If retVal <> 0 Then
Dim sTemp As String = sb.ToString()
MessageBox.Show(sTemp)
Else
Console.WriteLine("Error occured. GetLastError returns {0}.", Marshal.GetLastWin32Error())
End If
End Sub
Do you know one? Please contribute it!