我在Linux中开发了一个调用DDS磁带机的应用程序。在Linux中,我使用一个路径来调用磁带驱动器,即/ dev / st0
应用程序是用Java编写的,它使用JNI来调用其本机函数
我正在尝试在Windows 8.1上运行我的应用程序,但显然我收到错误:
java.io.IOException: The system cannot find the path specified.
你知道如何解决这个问题吗?
这是触发问题的Java代码:
public TapeJNI(String pathName){
fd = new FileDescriptor();
System.out.print("Opening device...");
System.out.flush();
try {
tapeOpen(pathName); //here it is
} catch (IOException e) {
System.err.print(e);
}
System.out.println("done!");
}
答案 0 :(得分:1)
这个答案都是从Win32的角度编写的 - 如果我正确地阅读了你的问题,你使用Java的事实并不真正相关(因为磁带访问是通过JNI进行的)。
在Windows上,您将不得不与磁带驱动器进行有些不同的对话。首先,它不会在/dev/st0
处有设备文件。您很可能希望使用SetupDiGetClassDevs()
作为类GUID传递GUID_DEVINTERFACE_TAPE
来枚举所连接的设备,然后使用SetupDiEnumDeviceInterfaces()
,然后您可以使用SetupDiGetDeviceInterfaceDetail()
获取设备路径。然后,您可以使用CreateFile()
打开它。
此外,您从Linux习惯的磁带IOCTL都不能在Windows上运行。相反,您很可能希望使用DeviceIoControl()
和IOCTL_SCSI_PASS_THROUGH_DIRECT
将SCSI命令发送到磁带设备。
另请注意,Windows确实有一些与磁带相关的API,这可能会消除发送SCSI命令的需要(取决于您的要求)。参见例如GetTapeParameters()
答案 1 :(得分:1)
如果您只有一个磁带机,则设备路径为“\\。\ Tape0”