Я хочу получить короткий путь к файлу по заданному пути Windows.
По этой причине я использую следующий код JAVA (с библиотекой JNA):
char[] result = new char[65535];
Kernel32.INSTANCE.GetShortPathName(file.toString(), result, result.length);
System.out.println(Native.toString(result));
Приведенный выше код работает нормально. Однако в некоторых случаях возвращаемое значение является пустой строкой. Например, используя следующий существующий путь в Windows, вы получите пустое значение:
C: \ Users \ someuser \ Downloads \ Gfl4AHIHf6SVMPMT9hjitNZOSXVofG1A9VJrv66YerqDfW8TW73O3VUb1wYYnOOB2l9CvSmTjfPLUvIwwvkddiL3sj7XNB1gqGGrUnmotsG4V3WR50SV1JAkXe2M0MpR4VDoYAUt5WgLpdLqoIdRlH4bd7OcZ3j0GOs90FGuZpZpjhEZBobNz1CwK50jJWYCwAHNmaYOYrC3JnOl6xtX4phNJm \ Gfl4AHIHf6SVMPMT9hjitNZOSXVofG1A9VJrv66YerqDfW8TW73O3VUb1wYYnOOB2l9CvSmTjfPLUvIwwvkddiL3sj7XNB1gqGGrUnmotsG4V3WR50SV1JAkXe2M0MpR4VDoYAUt5WgLpdLqoIdRlH4bd7OcZ3j0GOs90FGuZpZpjhEZBobNz1CwK50jJWYCwAHNmaYOYrC3JnOl6xtX4phNJmdsMlll
Возвращаемое значение Kernel32.INSTANCE.GetShortPathName
равно 0 , что согласно javadoc равно
Если функция не работает по какой-либо другой причине, возвращаемое значение равно нулю. Чтобы получить расширенную информацию об ошибке, позвоните GetLastError .
Вызов GetLastError возвращает 3 .
Теперь с помощью следующей команды:
dir /x
Я вижу, что файл на самом деле имеет сгенерированное ранее короткое имя (GFL4AH ~ 1).
Что я пропустил?