Преобразование между длинными и короткими именами файлов в 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;
}
