2017-08-07 7 views
0

私はアプリケーションを開発しており、同じファイルに保存して開くことができるいくつかのデータがあります。最初は、本質的に人間が読み取り可能ないくつかの行で、特定の属性に関する単純なデータを格納しています。データは、オブジェクトに格納され、operator<<およびoperator>>をサポートします。残りは私がメモリにロードした.png画像です。テキストとバイナリデータを1つのファイルに連結する

このデータをすべて1つのファイルに保存して、簡単にメモリに読み込めるようにするにはどうすればよいですか?これを簡単にするために画像データをメモリに保存する方法はありますか?

+1

なぜ同じファイル内の画像を属性として使用したいのですか?そんなことをするには貧しいデザインのようだ。理由はありますか、これは単純さの目的ですか? –

+1

@ EastonBornemeier私は、ユーザーがすべてのデータを含む単一のファイルを開くことができるようにしたい。ユーザーがファイルを共有することが簡単で、単一のプロジェクトで複数のファイルをまとめておくことを心配する必要はありません。 –

+0

これを行う1つの方法は、ファイルの先頭にデータブロック(たとえば1024バイト)を予約することです。テキストサイズがわかっていて、十分に小さい場合にのみ、この作業が可能です。 – Phil1970

答えて

2

私は を簡単にメモリに読み込むことができるように、このデータをすべて1つのファイルに保存できますか?これを簡単にするメモリに画像 のデータを保存する方法はありますか?

はい。

私がかつて取り組んでいた組み込みシステムでは、sysstemの設定をramファイルシステムに取り込むことが要件でした。 (1Mバイト)

zlibを使用して、複数のファイルを圧縮して1つのストレージファイルにマージしました。

おそらく、任意の圧縮システムがあなたのために働くことができます。 Linuxでは、私は(この質問のために)私のpopenのデモでなどgzipやgunzipを、


更新2017年8月7日

を実行するためにpopen()を使用することになり、私はコマンド文字列とを構築します

std::string cmd; 
cmd += "tar -cvf dumy514DEMO.tar dumy*V?.cc ; gzip dumy514DEMO.tar ; ls -lsa *.tar.gz"; 
//  tar without compression    ; next do compress 

次に、popen-wrapped-in-a-classインスタンスを作成し、popenの読み込みアクションを呼び出します。通常はユーザにはほとんどフィードバックがありません(UNIX Philosophyのスタイルと同様、成功メッセージもありません)。このデモでは-v(冗長オプション)を含めました。結果として得られたフィードバックは一緒にtarされた4つのファイルをリストアップし、結果の.gzファイルをリストします。

dumy514V0.cc 
dumy514V1.cc 
dumy514V2.cc 
dumy514V3.cc 
8 -rw-rw-r-- 1 dmoen dmoen 7983 Aug 7 17:23 dumy514DEMO.tar.gz 

とdirのリストからの抜粋私の実行、私のソースコード、および新たに作成されたtar.gz.を示し

-rwxrwxr-x 1 dmoen dmoen 86416 Aug 7 17:18 dumy514DEMO 
-rw-rw-r-- 1 dmoen dmoen 13576 Aug 7 17:18 dumy514DEMO.cc 
-rw-rw-r-- 1 dmoen dmoen 7983 Aug 7 17:23 dumy514DEMO.tar.gz 

ご覧のとおり、tar.gzは約8000バイトです。 4つのファイルは約70,000バイトになります。

+1

プログラム型ライブラリを 'popen'呼び出しよりも使用し、必要ならLinuxとWindows間の移植が容易になるでしょう。 –

+0

私はWeb上でWindowsの_popen()を簡単に見つけました。私はUbuntu 15.10でそれをコンパイルしようとして、g ++ v5を使用して約5番目の解決できないエラーの後で終了しようとしました。 –

+0

これは、おそらく私がライブラリを使用する方がおそらくもっと良いと言ったからです。 Windows上で動作する外部プログラムを取得するには少なくとも5つの解決できないエラーが必要ですが、Linux用に非常に簡単にコードを作成できます。図書館は、それが働いたと主張した場所であればどんなところでも働く可能性が高くなります。 –

関連する問題