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