ハフマンコードのエラーを無くすには


止めどない僕  2005-11-02 11:54:34  No: 127242  IP: [192.*.*.*]

おはようございます。
皆様にご質問があり、書き込みました。
ファイルの圧縮→(FD1枚に収まらなかった場合)分割→(FD)結合→解凍
という処理をしています。

圧縮したものを結合し、解凍するときに、
『a.LZH ハフマンコードが壊れています』
というエラーが発生してしまいます。

で、圧縮前(分割前)のファイル(LZH)形式のファイルを
テキストファイルで開き、
FD1・2枚のデータを結合したものが書き込まれているワークファイル(テキスト形式
後に拡張子変換を行います。)
圧縮前・ワークファイルデータの、全体の最初と最後・及び1枚目と2枚目のファイルの継ぎ目(?)・圧縮前の最初の文字・最後の文字・ワークファイルの最初の文字・最後の文字を調べたのですが、どれも完璧にデータを取れてきていました。

しかし、圧縮前のLZHファイルの容量は1906KB
ワークファイルの容量  1905KBとなっています。


圧縮前のデータの途中が取ってこれてきていないのでしょうか・・・。

圧縮ファイルをワークファイルで読み込むときは、

Dim sr As New StreamReader(圧縮したファイルパス, System.Text.Encoding.Default)
                            Dim A_re As String = sr.ReadToEnd
・・・
ワークファイルに書き込む
Dim st As StreamWriter = New StreamWriter(ワークファイルパス", False, System.Text.Encoding.Default)
                            st.Write(A_re)

で最後まで読み込んで、書き込んでいるのですが・・。
どなたか、ご教授賜れませんでしょうか・・・。
よろしくお願い致します.

編集 削除
medaka  2005-11-02 11:58:03  No: 127243  IP: [192.*.*.*]

バイナリで読み書きしないと駄目なんじゃ?

編集 削除
止めどない僕  2005-11-02 12:20:16  No: 127244  IP: [192.*.*.*]

分割処理は、圧縮前ファイルをFileStreamで開いて
BinaryReaderでバイトを取り出し、
区切り分をReadBytesで取り出し、分割時に使用するワークファイルに読み込んで、FDにコピーしています。
>バイナリで読み書きしないと駄目なんじゃ?

ってことは、
StreamReader(圧縮したファイルパス, System.Text.Encoding.Default)を


fs = New FileStream(圧縮したファイルパス,FileMode.Open,FileAccess.Read)
Dim r As New BinaryReader(fs)
・・・に

Dim st As StreamWriter = New StreamWriter(ワークファイルパス", False, System.Text.Encoding.Default)を

ちょっと違いますが、このような感じですかね・・
  Dim fs As New FileStream(ワークファイルパス ,FileMode.CreateNew)
 Dim w As New BinaryWriter(fs)

編集 削除
止めどない僕  2005-11-02 14:42:30  No: 127245  IP: [192.*.*.*]

間違ってますかねぇ・・・f(-_-;)

編集 削除
止めどない僕  2005-11-02 17:09:43  No: 127246  IP: [192.*.*.*]

出来ました。
いろいろやったら。。
お騒がせしました。

編集 削除
KG  2005-11-02 19:04:36  No: 127247  IP: [192.*.*.*]

解答にチェックを付けるのを、お忘れですよ:)

ついでですが、どうやったら解決したかも併せて発言していただくと
過去ログとして有意義なものになるかと思います。|^-^

編集 削除