gpt4 book ai didi

Windows 上的 Java 无法写入 PhysicalDriveX

转载 作者:可可西里 更新时间:2023-11-01 10:47:00 24 4
gpt4 key购买 nike

我在 Windows 上遇到了这个令人讨厌的 Java 问题。 (Java on Linux 没有这个问题。)

在 Linux 上,作为 root 用户,我可以使用 new RandomAccessFile(new File("/dev/sdb"), "rw");读写 我的第二个驱动器的原始扇区。

在 Windows 上,作为管理员,我可以使用 RandomAccessFile(new File("//./PhysicalDrive1"), "r");读取 原始扇区相同的第二个驱动器。但是,如果我改为指定 "rw" 模式,我会得到一个 java.io.FileNotFoundException

我可以在 Windows 上使用 JNI+C 作为变通方法,但我想要一个非基于 DLL 的跨平台解决方案,它完全基于 Java。

有没有人对如何解决这个问题有任何提示?

编辑:

我得到的确切异常是关于某些“参数”是“不正确的”:

Exception in thread "main" java.io.FileNotFoundException: \\.\PhysicalDrive1 (The parameter is incorrect)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:122)
at MyTest.main(MyTest.java:100)

最佳答案

正如@daniel-alder 提到的here ,您可以尝试运行以下代码:

String pathname;
// Full drive:
// pathname = "\\\\.\\PhysicalDrive0";
// A partition (also works if windows doesn't recognize it):
pathname = "\\\\.\\GLOBALROOT\\ArcName\\multi(0)disk(0)rdisk(0)partition(5)";

Path diskRoot = ( new File( pathname ) ).toPath();

FileChannel fc = FileChannel.open( diskRoot, StandardOpenOption.READ,
StandardOpenOption.WRITE );

ByteBuffer bb = ByteBuffer.allocate( 4096 );

fc.position( 4096 );
fc.read( bb );
fc.position( 4096 );
fc.write( bb );

fc.close();

关于Windows 上的 Java 无法写入 PhysicalDriveX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com