2014-05-21 2 views
0

J'ai développé une application sous Linux qui appelle un lecteur de bande DDS. Dans Linux J'utilise un chemin pour appeler le lecteur de bande qui est/dev/st0Chemin de répertoire du lecteur de bande sous Windows 8.1

L'application est écrit en Java et utilise JNI pour appeler sa fonction native

Je suis en train d'exécuter mon application sur Windows 8.1 mais évidemment je reçois une erreur:

java.io.IOException: The system cannot find the path specified. 

Savez-vous comment résoudre ce problème?

Ceci est le morceau Java de code qui déclenche la question:

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

Répondre

1

Si vous avez seulement un lecteur de bande le chemin du périphérique sera « \\. \ Tape0 »

1

Cette réponse est tout écrit dans une perspective Win32 - si je lis votre question, le fait que vous utilisez Java n'est pas vraiment pertinent (puisque l'accès à la bande se fait via JNI).

Vous allez devoir parler différemment au lecteur de bande sous Windows. Tout d'abord, il ne va pas avoir un fichier de périphérique à /dev/st0. Il est fort probable que vous souhaitiez énumérer les périphériques attachés en utilisant SetupDiGetClassDevs() en passant le GUID_DEVINTERFACE_TAPE en tant que GUID de classe, suivi de SetupDiEnumDeviceInterfaces(), puis vous pouvez obtenir le chemin d'accès du périphérique en utilisant SetupDiGetDeviceInterfaceDetail(). Vous pouvez ensuite l'ouvrir en utilisant CreateFile().

De plus, aucune des IOCTL sur bande que vous avez l'habitude de Linux ne fonctionnera sous Windows. Au lieu de cela, il est fort probable que vous souhaitiez envoyer des commandes SCSI au périphérique de bande en utilisant DeviceIoControl() et IOCTL_SCSI_PASS_THROUGH_DIRECT. Notez également que Windows possède des API liées à la bande, ce qui évite d'avoir à envoyer des commandes SCSI (en fonction de vos besoins). Voir par exemple GetTapeParameters()

+0

Merci, il a été une réponse très explicite – QGA

Questions connexes