2

C++ スクリプトを使用して圧縮ファイルを読み書きしたいと考えています。この目的のために、gzstream ライブラリを使用します。次のような非常に単純な例で問題なく動作します。

string inFile="/path/inputfile.gz";
igzstream inputfile;
ogzstream outputfile("/path/outputfile.gz");
inputfile.open(inFile.c_str());

// Writing from input file to output file
string line;
while(getline(inputfile, line)) {
    outputfile << line << endl;
}

しかし、私の C++ スクリプトでは、事態はより複雑になり、出力ファイルは動的ベクトル内に作成されます。

圧縮されていないファイルの場合、この方法は非常にうまく機能しました:

string inFile="/path/uncompressedInputFile.ext";
ifstream inputfile;
vector <ofstream *> outfiles(1);
string outputfile="/path/uncompressedOutputFile.ext";
outfiles[1] = new ofstream(outputfile.c_str());

inputfile.open(inFile.c_str());
string line;
while(getline(inputfile, line)) {
    *outfiles[1] << line << endl;
}

圧縮ファイルを使用すると、この方法で破損したファイルが生成されます。

string inFile="/path/compressedFile.gz";
igzstream inputfile;
vector <ogzstream *> outfiles(1);
string outputfile="/path/compressedOutputFile.gz";
outfiles[1] = new ogzstream(outputfile.c_str());

inputfile.open(inFile.c_str());
string line;
while(getline(inputfile, line)) {
    *outfiles[1] << line << endl;
}

パスに「compressedOutputFile.gz」があり、空ではありませんが、圧縮を解除しようとすると、「予期しないファイルの終わり」が発生しました。これは、ファイルが破損していることを意味すると思います....何が問題なのですか? 誰でも私を助けてくれませんか?! :)

4

1 に答える 1