Windows OS以前のMS-DOSシステムでは、フォルダやファイルの名前に8.3形式の短い名前(以降、短いパス)しか利用できなかった。現在のWindows OSでも、一部、8.3形式の短いパスの命名規則が用いられている個所(例えば、レジストリの値など)が存在する。そこで「TIPS:8.3形式の短いパスを長いパスに変換するには?」では、短いパスを、Windowsで使われる通常の長いパスに変換する方法を紹介した。本TIPSでは、その逆に、長いパスから短いパスに変換する方法を紹介する。
using System;
using System.Text;
using System.Runtime.InteropServices;
class Program
{
[DllImport("kernel32.dll")]
private static extern int GetShortPathName(string longPath, StringBuilder shortPathBuffer, int bufferSize);
<DllImport("kernel32.dll")> _
Private Function GetShortPathName(ByVal longPath As String, ByVal shortPathBuffer As StringBuilder, ByVal bufferLength As Integer) As Integer
End Function
Sub Main()
Dim longPath As String = _
"C:\Program Files\Mozilla Firefox\FIREFOX.EXE"
Dim bufferLength As Integer = 260
Dim shortPathBuffer As New StringBuilder(bufferLength)
GetShortPathName(longPath, shortPathBuffer, bufferLength)
Dim shortPath As String = shortPathBuffer.ToString()
Console.WriteLine(shortPath)
' 出力例:C:\PROGRA~1\MOZILL~1\FIREFOX.EXE
End Sub