Windowsで、CDからISOイメージを作成(抽出)してみる
さっきのforコマンドのことを調べていて見っけました。CDからISOイメージを作成(抽出)するには、Linuxだとddコマンドやmkisofsコマンドを使いますよね。
Windowsには/dev/cdromや/mnt/cdromはないので、Cygwinを使うか専用のツールを用意する必要がある、と思ってました。しかーし! よくよく考えてみれば\\?\CdRom0というわけのわからないものがあるじゃないかっ。
ということで、copyコマンドやxcopyコマンドで試してみました…が、失敗。だめもとで自分でプログラムを書いてみることに。しかもJavaで。
import java.io.*; public class Copy { public static void main(String[] args) throws IOException { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(args[0]); out = new FileOutputStream(args[1]); final byte[] buf = new byte[4096]; int len; // このへんはいいかげんに書いたのでバグってるかも while((len = in.read(buf)) > 0) { out.write(buf, 0, len); } } finally { try { if(in != null) { in.close(); } } finally { if(out != null) { out.close(); } } } } }
おそるおそる実行してみると…
C:> java Copy \\?\CdRom0 test.iso C:>
…ISOイメージ、できたっぽいぞっ! test.isoをVMwareでCD-ROMドライブとしてアクセスしてみたら、ちゃんと認識してくれました。
ということで、C/C++でも同様にすればISOイメージを作成できそうです。いま手もとにC/C++コンパイラがないので確認できませんが。
なお、マルチセッションなCDとかコピーガードなCDでは試してません。たぶんだめでしょうね。
あと、Javaの環境はJRE 5.0 Update 6です。J2RE 1.4.xとかではたぶんだめだと思います。