Преобразование между длинными и короткими именами файлов в C#

Вы можете использовать функцию API GetShortPathName для преобразования от длинного к коротким именам файлов. Следующий код объявляет функцию API.

// Определить функцию API GetShortPathName.
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern uint GetShortPathName(string lpszLongPath,
char[] lpszShortPath, int cchBuffer);

Следующий метод ShortFileName использует функцию API для преобразования длинного имени файла в короткий.

// Возвращает короткое имя файла для длинного имени файла.
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);
}

Этот код создает буфер символов для хранения короткого имени файла. Он вызывает функцию API, преобразует буфер в строку и затем усекает его до нужной длины.

В дополнение к GetShortPathName существует функция API GetLongPathName, которая преобразует от короткого имени файла в длинный, но есть еще более простой способ сделать это. Просто создайте объект FileInfo для имени файла, а затем используйте его свойство FullName. Этот метод использует метод LongFileName, показанный в следующем коде.

// Возвращает длинное имя файла для короткого имени файла.
private string LongFileName(string short_name)
{
    return new FileInfo(short_name).FullName;
}

Источник: http://csharphelper.com/blog/2015/01/convert-between-long-and-short-file-names-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector