我在Windows上运行Java这个讨厌的问题。 (Linux上的Java没有这个问题。) 在Linux上,作为root用户,我可以使用new RandomAccessFile(new File("/dev/sdb"), "rw"); 读取和写入我的第二个驱动器的原始扇区。 在Windows上,作为pipe理员,我可以使用RandomAccessFile(new File("//./PhysicalDrive1"), "r"); 读取相同的第二个驱动器的原始扇区。 但是,如果我指定了"rw"模式,我得到一个java.io.FileNotFoundException 。 我可以在Windows上使用JNI + C作为解决方法,但是我想要基于Java的非基于DLL的跨平台解决scheme。 有没有人有任何提示如何解决这个问题? 编辑: 我得到的确切例外是关于一些“参数”是“不正确的”: 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)
我想先写一些东西到磁盘设备上,然后读取相同的数据,然后再写一些。 我的代码如下所示: std::string devicePath = "\\\\.\\PhysicalDrive0"; //'0' is only example here HANDLE source = CreateFile(disk.c_str(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, NULL, NULL); BOOST_TEST_REQUIRE(source, "Failed to create file handle."); std::unique_ptr<CHAR[]> primaryBuffer(new CHAR[DEFAULT_FILESIZE]); std::unique_ptr<CHAR[]> checkBuffer(new CHAR[DEFAULT_FILESIZE]); for (auto i = 0; i < DEFAULT_FILESIZE; ++i) { primaryBuffer[i] = 'x'; checkBuffer[i] = ' '; } […]
由于从数据库中检索到大量数据,我的C ++应用程序偶尔会耗尽内存。 它必须在32位WinXP机器上运行。 是否可以透明地(对于大多数现有的代码)将数据对象换成磁盘,并只在需要时将它们读入内存, 所以我不限于 32位Windows给这个过程的2GB ? 我看过VirtualAlloc和地址窗口扩展,但我不知道这是我想要的。 我也发现这个问题提问者创build一个文件映射,并希望在那里创build对象。 一个答案build议使用placement new ,这听起来像对其他代码是非常透明的。 这会阻止我的应用程序耗尽物理内存吗? 我不完全确定,因为毕竟仍然有32位地址空间的限制。 或者这是一个不同types的问题,将尝试创build大量的对象时发生?
使用Java,是否有可能获得驱动器的所谓的Windows“磁盘签名”? 我知道我可以以某种方式parsingdiskpart的输出,但这不是一个很好的解决scheme):
我需要检查我的Windows应用程序,看看它如何在具有慢磁盘的系统上工作。 我怎样才能有一个模拟缓慢的磁盘,Windows不caching它的内容,所以我可以重复我的testing? 更新:我有很多代码访问磁盘,不能创build新的类来模拟慢光盘,部分代码是第三方,没有源代码访问。 更新2:我也需要减慢Directory.GetFiles()的速度。
我在办公室遇到的一个常见模式是,如果我们的IO操作失败了,我们会等待很短的时间再尝试几次,希望它突然开始工作。 我在说什么的例子: bool WriteAFile() { uint32_t writeAttempts = 0; do { if (WriteFile(/*…*/)) { break; } Sleep(50); writeAttempts++; } while (writeAttempts < 3); return writeAttempts < 3; } 我想这种行为最初是popup来的,以防止在处理临时被另一个进程locking的文件时出现故障……这是有道理的……但是,我没有看到这是如何适用于其他操作的。 以这种方式重复IO操作是否会增加将“良好”数据写入磁盘的机会? 它可以用作临终驱动器的解决方法吗? 这种行为还有其他合理的用途吗? PS:虽然我把这个标记为一个C ++的Windows例子,但是我有兴趣知道是否有其他的语言/平台也有这么强大的理由。
在Windows中可以知道我们正在从AC / C ++程序处理什么样的磁盘? 忘了gpt或mbr,怎么知道它是基本的还是dynamic的? 程序input可以是驱动器盘符或任何与磁盘相关的信息,输出应该是dynamic的或基本的。 不需要直接的做法,即使是漫长的过程,也没关系。 我无法在msdn中find很多。 请帮我一下
在C中,使用标准的Windows API,读取未格式化磁盘的最佳方法是什么? 具体来说,我有一个MMC或SD卡的数据,但没有文件系统(不是FAT16,而不是FAT32,只是原始数据)。 如果有一个简单的方法来打开整个卡的逐字节二进制访问,这将是很好的。 谢谢!
我想更改一个驱动器号。 例如,我可以使用diskpart为驱动器(一个USB磁盘或一个新的硬盘)分配一个新的字母。 我如何在C / C ++中实现它?
当使用PowerShell连接到运行Windows 10 IoT Core的设备时,我无法访问其他位于普通PC上的磁盘pipe理命令。 这些命令是不是可用,或者我将不得不做些事情来让他们工作? 示例命令: 获得盘 初始化磁盘 获得分区