文字列を圧縮してテキストファイルに保存し、データを読み取って解凍しようとしています。ただし、読み取った文字列を解凍しようとすると、Z_BUF_ERROR (-5) が発生し、文字列が解凍される場合と解凍されない場合があります。
コンソールでは、一日中圧縮/解凍できます。
std::string s = zlib_compress("HELLO asdfasdf asdf asdfasd f asd f asd f awefo@8 892y*(@Y");
std::string e = zlib_decompress(s);
文字列は問題なく元の文字列e
を返します。
ただし、これを行うと:
zlib_decompress(readFile(filename));
を取得しZ_BUF_ERROR
ます。ファイル内の隠し文字が原因の可能性もあると思いますが、よくわかりません。
これが私のreadFile
機能です:
std::string readFile(std::string filename)
{
std::ifstream file;
file.open(filename.c_str(), std::ios::binary);
file.seekg (0, std::ios::end);
int length = file.tellg();
file.seekg (0, std::ios::beg);
char * buffer = new char[length];
file.read(buffer, length);
file.close();
std::string data(buffer);
return data;
}
圧縮データを書き込むときは、次を使用します。
void writeFile(std::string filename, std::string data)
{
std::ofstream file;
file.open(filename.c_str(), std::ios::binary);
file << data;
file.close();
}
必要に応じて、解凍/圧縮に使用する関数を示しますが、ファイル IO なしで機能する場合、問題は IO の問題だと思います。