de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 tflutre
tflutre
質問

gzstreamをgzippedファイルで使用する場合のストリーム位置の保持方法

私はgzippedで圧縮された大きなファイルを扱わなければなりません。私はラインのサブセットにアクセスする必要がありますが、必ずしもそうではありません。このように、私は興味のある行にストリームの位置を記録しながら、一度すべてのファイルを調べることを考えていました。そして、これらのストリームの位置を使用して、必要な情報をすばやく取得します。

このため、 gzstream を使用しています。しかし残念ながら tellg はこのラッパーでは動作しません。

#include 
#include 
using namespace std;

#include 

int main (int argc, char ** argv)
{
  string inFile;
  string line;

  system ("rm -f infile1.txt; echo \"toto1\ntoto2\ntoto3\" > infile1.txt");
  inFile = "infile1.txt";
  ifstream inStream;
  inStream.open (inFile.c_str());
  cout << inStream.tellg () << endl;
  getline (inStream, line);
  cout << inStream.tellg () << endl;
  inStream.close ();

  system ("rm -f infile1.gz; echo \"toto1\ntoto2\ntoto3\" | gzip > infile1.gz");
  inFile = "infile1.gz";
  igzstream igzStream;
  igzStream.open (inFile.c_str());
  cout << igzStream.tellg () << endl;
  getline (igzStream, line);
  cout << igzStream.tellg () << endl;
  igzStream.close ();

  return 0;
}

このコードはこれを返します:

$ gcc -Wall test.cpp -lstdc++ -lgzstream -lz
$ ./a.out
0
6
18446744073709551615
18446744073709551615

この作業をigzストリームで行う方法はありますか?または、 gzipフィルタのブーストを使用する必要があります。代わりに?どんなコードスニペットも大いに感謝されるでしょう;)

2 2011-10-27T18:06:18+00:00 1
プログラミング
gzip
c++
aselle
2日 12月 2011 в 6:39
2011-12-02T06:39:28+00:00
さらに
ソース
編集
#56791283

gzstream doesn't support seeking in a file, and this is not a particularly efficient operation in a gzipped file anyways. You can look at this question and its answer: Random access gzip stream

その答えの1つは、zlibソースコードのサンプルコードへのリンクを提供し、gzstreamで必要な機能を実装するのに役立てることができます。もう1つの答えは、より効率的にシークをサポートする変種圧縮フォーマットを示唆しています。

ブーストiostreamはシークをサポートするかもしれませんが、gzstreamはかなり使いやすく、変更するのが簡単ですので、それに固執する傾向がありました。

0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 6日前
2
Hideo Nakagawa
登録済み 1週間前
3
Sergiy Tytarenko
登録済み 1週間前
4
shoxrux azadov
登録済み 1週間前
5
Koreets Koreytsev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属