0

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

2 回答 2

1

这个答案都是从 Win32 的角度写的——如果我正确地阅读了您的问题,那么您使用 Java 的事实并不真正相关(因为磁带访问是通过 JNI 发生的)。

您将不得不在 Windows 上以不同的方式与磁带驱动器通信。首先,它不会在/dev/st0. 您很可能希望使用作为类 GUID 的SetupDiGetClassDevs()传递来枚举连接的设备,然后是,然后您可以使用. 然后,您可以使用.GUID_DEVINTERFACE_TAPESetupDiEnumDeviceInterfaces()SetupDiGetDeviceInterfaceDetail()CreateFile()

此外,您在 Linux 中使用的磁带 IOCTL 都不能在 Windows 上运行。DeviceIoControl()相反,您很可能希望使用和向磁带设备发送 SCSI 命令IOCTL_SCSI_PASS_THROUGH_DIRECT

另请注意,Windows 确实有一些与磁带相关的 API,这可能不需要发送 SCSI 命令(取决于您的要求)。参见例如GetTapeParameters()

于 2014-05-21T09:35:14.767 回答
1

如果您只有一个磁带驱动器,则设备路径将为“\\.\Tape0”

于 2015-07-16T19:49:02.523 回答