Хорошо, я о чем-то:)
Использование JNA Я могу вызвать Win32 API (и * nix API тоже) из java .
Я попытался вызвать 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
(этот файл можно найти в пакете src.zip в разделе загрузки на сайте JNA ):
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;