|
分類:[C#]
> Dim N As String * 6 > N = No > Open Path For Binary Access Write As #1 > Put #1, 3, N > Close #1
厄介なのは、固定長文字列型変数 N ですね。
VB6 のそれは、バイナリモードで出力された場合でも、Unicode→Shift_JIS変換を 発生させるようになっていたと思います。ですから、元となる引数 No の内容に 漢字等があるかどうかで、その出力サイズが「6バイト〜12バイト」の範囲で 変動するはずです。
> BinaryWriter binWriter = new BinaryWriter(new FileStream(BinFileName, FileMode.CreateNew));
元の VB6 コードを読んでみると、「ファイルサイズが0なら何もしない」 「0バイトを超えるサイズなら、3バイト目に書き込む(先頭2バイトはそのまま)」 という処理が行われていますから、ここで CreateNew を使うべきではないかと。
> byte[] bytesData = System.Text.Encoding.GetEncoding(932).GetBytes(BinData); Shift_JIS にエンコードする前に、VB6でいうところの
> Dim N As String * 6 > N = No に相当する処理が必要になりますから、.GetBytes(BinData) ではなく、 .GetBytes((BinData + " ").Substring(0, 6)) などの方が良いかと。
> binWriter.Write(bytesData,0,bytesData.Length ); これだと、 > Put #1, 3, N ではなく、 > Put #1, , N という意味になってしまいます。「3バイト目」に書き込むのですから、 事前に、.Seek(2, Begin)などが必要になるかと思います。
|