2014-05-21 63 views
0

我在Linux中開發了一個調用DDS磁帶驅動器的應用程序。在Linux中我使用路徑來調用磁帶驅動器這是/ dev/st0中Windows 8.1上的磁帶驅動器目錄路徑

該應用程序是用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!"); 
} 

回答

1

如果你只有一個磁帶驅動器的設備路徑將是「\\。\ TAPE0」

1

這個答案是所有從一個Win32角度寫 - 如果我正確讀取您的問題,您使用的是Java的事實不真正相關的(因爲磁帶訪問是通過JNI進行的)。

您將不得不在Windows上與磁帶驅動器稍有不同。首先,它不會在/dev/st0有一個設備文件。最有可能的是,您需要枚舉使用SetupDiGetClassDevs()GUID_DEVINTERFACE_TAPE作爲類GUID,然後是SetupDiEnumDeviceInterfaces(),然後您可以使用SetupDiGetDeviceInterfaceDetail()獲取設備路徑。然後您可以使用CreateFile()打開它。

此外,您習慣使用Linux的磁帶IOCTL無法在Windows上使用。相反,很可能您想要使用DeviceIoControl()IOCTL_SCSI_PASS_THROUGH_DIRECT將SCSI命令發送到磁帶設備。

還要注意,Windows確實有一些與磁帶有關的API,這可能不需要發送SCSI命令(取決於您的要求)。見例如GetTapeParameters()

+0

謝謝你,這是一個非常解釋性回答 – QGA

相關問題