Ist es möglich, die physische Position einer Datei auf der Disk herauszufinden? Ich finde dazu auf SO nichts.
https://howtodoinjava.com/java/io/how-java-io-works-internally/
Wenn ich das richtig sehe, kann ich auf den Kernel Space, DMA und Diskcontroller von Java aus nicht zugreifen oder?
Versuch:
public static long getPositionOnDisk(Path file) {
try (RandomAccessFile raf = new RandomAccessFile(file.toFile(), "r")) {
return raf.getFilePointer();
} catch (IOException e) {
e.printStackTrace();
return -1;
}
}
liefert immer 0
Oder weiß jemand wie es hier weitergehen könnte?
import com.sun.jna.Function;
import com.sun.jna.Library.Handler;
public class FD2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Function f1 = Function.getFunction("kernel32", "OpenFile");
HFile h1 = (HFile) f1.invoke(HFile.class, new Object[] {"D:\\a.pdf", 0, 0});
}
}
HFile kennt er natürlich nicht, und DWORD ebenso wenig…
Suche den ersten Startblock der Datei auf dem Datenträger bzw. in der NTFS-Partition. Wenn die Datei fragmentiert ist, dann quasi die Lesestelle des ersten Byte.
Gibt es vielleicht eine C Win-Api -Funktion dafür? Wenn ja, wie kann ich diese proprietäre Funktion aus Java heraus aufrufen?
Habt ihr vielleicht ein gutes JNA/JNI Tutorial dazu? Bin über jede Antwort dankbar.