好的,我在做某事:)
使用JNA,我可以从 java调用 Win32 API(和 *nix API)。
我尝试调用GetFileInformationByHandle
并确实得到了结果,但dwVolumeSerialNumber
属性始终等于 0(尝试使用我的 C: 和 D: 驱动器)
然后我在 MSDN 上看到了这个功能:MoveFileEx
. 当标志参数设置为 0 时,移动复制功能将被禁用。它有效!!!!
所以我会简单地打电话
if (!Kernel32.INSTANCE.MoveFileEx(source.getAbsolutePath(), destination.getAbsolutePath(), 0)) {
System.out.println("logical move failed");
}
这是要放入Kernel32.java
接口的代码(该文件可以在JNA站点下载部分的 src.zip 包中找到):
boolean MoveFileEx(String lpExistingFileName, String lpNewFileName, int dwFlags);
int MOVEFILE_REPLACE_EXISTING = 0x01;
int MOVEFILE_COPY_ALLOWED = 0x02;
int MOVEFILE_CREATE_HARDLINK = 0x04;
int MOVEFILE_WRITE_THROUGH = 0x08;
int MOVEFILE_DELAY_UNTIL_REBOOT = 0x10;
int MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20;