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


止めどない僕  2005-11-02 20:54:34  No: 127242

おはようございます。
皆様にご質問があり、書き込みました。
ファイルの圧縮→(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 20:58:03  No: 127243

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


止めどない僕  2005-11-02 21:20:16  No: 127244

分割処理は、圧縮前ファイルを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 23:42:30  No: 127245

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


止めどない僕  2005-11-03 02:09:43  No: 127246

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


KG  2005-11-03 04:04:36  No: 127247

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

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


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加