Windows 8.1上的磁带驱动器目录路径

时间:2014-05-21 09:11:35

标签: java path java-native-interface scsi

我在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!");
 }

2 个答案:

答案 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”