バイナリファイルをコピーする機能があります
public static void copyFile(String Src, String Dst) throws FileNotFoundException, IOException {
File f1 = new File(Src);
File f2 = new File(Dst);
FileInputStream in = new FileInputStream(f1);
FileOutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
そして2番目の機能
private String copyDriverToSafeLocation(String driverPath) {
String safeDir = System.getProperty("user.home");
String safeLocation = safeDir + "\\my_pkcs11tmp.dll";
try {
Utils.copyFile(driverPath, safeLocation);
return safeLocation;
} catch (Exception ex) {
System.out.println("Exception occured while copying driver: " + ex);
return null;
}
}
2番目の関数は、システムで見つかったすべてのドライバーに対して実行されます。ドライバーファイルがコピーされ、そのドライバーでPKCS11を初期化しようとしています。初期化に失敗した場合は、次のドライバーに移動し、それをtmpの場所などにコピーします。
初期化はtry/catchブロックにあります。最初の失敗後、次のドライバーを標準の場所にコピーできなくなりました。
例外が発生します
Exception occured while copying driver: java.io.FileNotFoundException: C:\Users\Norbert\my_pkcs11tmp.dll (The process cannot access the file because it is being used by another process)
どうすれば例外を回避し、ドライバーファイルを安全にコピーできますか?
なぜ私がドライバーをコピーしようとしているのか不思議な人のために...PKCS11には厄介なBUGがあり、パスに「(」が含まれる場所に格納されているドライバーを使用できません...これは私が直面しているケースです。
よろしくお願いします。