Convert between long and short file names in C#

[short file names]

You can use the GetShortPathName API function to convert from long to short file names. The following code declares the API function.

// Define GetShortPathName API function.
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern uint GetShortPathName(string lpszLongPath,
char[] lpszShortPath, int cchBuffer);

The following ShortFileName method uses the API function to convert a long file name into a short one.

// Return the short file name for a long file name.
private string ShortFileName(string long_name)
{
    char[] name_chars = new char[1024];
    long length = GetShortPathName(
        long_name, name_chars,
        name_chars.Length);

    string short_name = new string(name_chars);
    return short_name.Substring(0, (int)length);
}

This code creates a character buffer to hold the short file name. It calls the API function, converts the buffer into a string, and then truncates it to its proper length.

In addition to GetShortPathName, there’s a GetLongPathName API function that converts from a short file name to a long one, but there’s an even easier way to do this. Simply create a FileInfo object for the file name and then use its FullName property. The LongFileName method shown in the following code uses this approach.

// Return the long file name for a short file name.
private string LongFileName(string short_name)
{
    return new FileInfo(short_name).FullName;
}


Download Example   Follow me on Twitter   RSS feed   Donate




This entry was posted in files, system and tagged , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *