2011-01-22 7 views
0

C++ ofstreamの出力ポインタの位置を取得するために、streamposオブジェクトを返すostream :: tellp()を呼び出します。私はバイナリファイルにこの値(かなり大きいかもしれません)を保存したいと思います。C++ forstreamのputポインタの生の値の取得(ストレージ用)

しかし、このstreamposオブジェクトから出力ポインタの位置の生の値を取得する方法が見つかりません。この値が非常に大きいと心配しなければ、単純に整数に変換します。しかし、私のファイルサイズは数ギガバイトかもしれません。誰にもこれについてのアイデアはありますか?

ありがとうございます!

答えて

2

streamposは、一部の(通常は符号なし)整数型のtypedefです。ファイル内の位置はしばしば "put pointer"と呼ばれますが、実際には取得するポインタ値はありません。最新のコンパイラで

streamposは、あなたが長い間、あなたが残して心配する必要はありません意味ネイティブの64ビット整数、(すなわちunsigned long long、またはMSVC++のunsigned __int64、またはGCCのuint64_t)にコンパイルしようとしていますstreamposの価値観のもの。

+0

私のマシン(Mac)の1つはsizeof(streampos)= 136ですが、別の(Linux)sizeof(streampos)= 16です。明らかに16バイトでは十分ではないので、Linuxマシンではstreamposがクラスであるようです。しかし、私はそれをuint64_tに変換して、それがうまくいくかどうかを調べるつもりです。ありがとうございました! – samsamoa

+0

16バイトは64ビットです。ファイル2 [EiB](http://en.wikipedia.org/wiki/EiB)のサイズには十分です。たとえそれを保持できるデバイスが今日でも利用可能であったとしても、ほとんどのオペレーティングシステムは64ビットの整数を使ってファイルサイズを表現するため、大きなファイルを作成することはできませんでした。どのように入手したか分かりませんsizeof(streampos)= 136 - それが可能なアーキテクチャは認識していません。 –

+0

お世話になりました!それは今意味がある - 私は偶然16ビットを考えていた。私のMac(10.6.6、Intel Core 2 Duo)では、私は単にiostreamを含めて "cout << sizeof(streampos)<< endl;"それは136を印刷しました。非常に奇妙です! – samsamoa

関連する問題