おはようございます。
皆様にご質問があり、書き込みました。
ファイルの圧縮→(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)
で最後まで読み込んで、書き込んでいるのですが・・。
どなたか、ご教授賜れませんでしょうか・・・。
よろしくお願い致します.
バイナリで読み書きしないと駄目なんじゃ?
分割処理は、圧縮前ファイルを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)
間違ってますかねぇ・・・f(-_-;)
出来ました。
いろいろやったら。。
お騒がせしました。
解答にチェックを付けるのを、お忘れですよ:)
ついでですが、どうやったら解決したかも併せて発言していただくと
過去ログとして有意義なものになるかと思います。|^-^
ツイート | ![]() |