Windows上文件路径的简称未正确返回

时间:2018-11-11 16:13:55

标签: java windows filesystems jna

我想从给定的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是否\下载\ Gfl4AHIHf6SVMPMT9hjitNZOSXVofG1A9VJrv66YerqDfW8TW73O3VUb1wYYnOOB2l9CvSmTjfPLUvIwwvkddiL3sj7XNB1gqGGrUnmotsG4V3WR50SV1JAkXe2M0MpR4VDoYAUt5WgLpdLqoIdRlH4bd7OcZ3j0GOs90FGuZpZpjhEZBobNz1CwK50jJWYCwAHNmaYOYrC3JnOl6xtX4phNJm \ Gfl4AHIHf6SVMPMT9hjitNZOSXVofG1A9VJrv66YerqDfW8TW73O3VUb1wYYnOOB2l9CvSmTjfPLUvIwwvkddiL3sj7XNB1gqGGrUnmotsG4V3WR50SV1JAkXe2M0MpR4VDoYAUt5WgLpdLqoIdRlH4bd7OcZ3j0GOs90FGuZpZpjhEZBobNz1CwK50jJWYCwAHNmaYOYrC3JnOl6xtX4phNJmdsMlll

Kernel32.INSTANCE.GetShortPathName的返回值为 0 ,根据javadoc,返回值为

  

如果函数由于任何其他原因而失败,则返回值为零。要获取扩展的错误信息,请调用 GetLastError

调用 GetLastError 会返回 3

现在,使用以下命令:

dir /x

我可以看到该文件实际上具有一个已生成的简短名称(GFL4AH〜1)。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法:

 int returnCode = Kernel32.INSTANCE.GetShortPathName("\\\\?\\" + file.toString(), result, result.length);

从MS文档开始:

  

要指定扩展长度的路径,请使用“ \?\”前缀。例如,“ \?\ D:\ very long path”。