著作一覧 |
放っておいたら、圧縮して保存するプログラムができたから見てくれというので見に行った。C#のプログラムだ。
System.IO.Compressionの下を使うのかと思ってたら、いきなりjava.ioとか書いてあるんでびっくりしたが、確かにJ#がインストールされているんならそれもありだな、と納得した。
// zip.cs public class Zip { public static void Main(string[] args) { java.util.zip.ZipOutputStream zo = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream("test.zip")); sbyte[] buff = new sbyte[8000]; // sbyte……確かに。 foreach (string file in args) { // fileはファイル名(ディレクトリは含めない) zo.putNextEntry(new java.util.zip.ZipEntry(file)); // バッファがsbyteなんで読み込みもJ#オブジェクトにする java.io.FileInputStream fs = new java.io.FileInputStream(file); for (int len = 0; (len = fs.read(buff, 0, buff.Length)) > 0;) { zo.write(buff, 0, len); } fs.close(); } zo.close(); } }コンパイルには、明示的にJ#ライブラリ(vjslib.dll)を指定する。
C:\> csc /reference:vjslib.dll zip.cs
追記:プロセッサはx86を指定しておかないと、何気なくx64システムに持っていくとランタイムエラーになります(Kazzさんのツッコミ参照)。
ジェズイットを見習え |
ご存知かもしれませんが。<br><br>>vjslib.dll<br> このアセンブリは再頒布キットが必要なことと、VJ#はx86用のアセンブリしか提供されないあることに注意です(WOW64上での動作なので64Bitシステムからの呼び出しは失敗します)<br><br>http://msdn2.microsoft.com/ja-jp/library/ms241064.aspx<br> <br>
どうもありがとうございます。64ビットシステムで使えないのは結構痛いですね(「プラットフォームの柔軟なイメージ」というのはAny指定ということなのか)<br>追記しておきました。