問題タブ [structured-storage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - IStorage の VCL 代替
はじめに、私は Borland C++ と VCL を使用しています。
単一のファイルとしてディスクに保存でき、プログラムで列挙、アクセス、操作できるバイナリ データの複数の名前付き BLOB を格納できる、ある種の構造化ストレージ オブジェクトが必要です。
IStorageインターフェイスは私が望むものに近いようですが、とりわけ TStream (VCL) を IStream に変換するのは厄介であり、TIniFile のように既に利用可能な VCL のものを使用するより単純なソリューションでなければならないため、VCL スタイルのソリューションを好みますが、バイナリデータ。
バイナリ データのブロブは非常に大きく、XML で使用するために正しくエンコードされていれば、まったく効率が悪いため、XML は使用したくありません。
すべての提案を前もって感謝します。
visual-studio - VisualStudioSUOファイルのファイル形式または解析ガイダンス。
.suoファイルのファイル形式の仕様または解析のガイダンスはどこにありますか?それらからブレークポイント情報を抽出したいのですが。
MSDNトピックのソリューションユーザーオプション(.Suo)ファイルでは、ストレージストリームがこの構造ストレージファイルから読み取られ、この構造ストレージファイルに書き込まれる方法について簡単に説明していますが、この情報は、特に私の構造ストレージの経験者にとっては非常に乏しいものです。
.net - 変更されたCOM構造化ストレージファイルをディスクに書き込む方法は?
ストレージを開いてオブジェクトをストリーミングできるCOM構造化ストレージファイルリーダーを実装しました。これはすべて満足のいくことです。しかし今、私はあるアーカイブから別のアーカイブに物事をコピーし、物事の名前を変更してから、物事をディスクに書き戻すことができるようにしたいと思っています。ディスクに変更を書き込むことすらできないように見えるので、コピーと名前変更の操作に対処することすらしていません。ルートIStorageオブジェクトのCommitメソッドを呼び出してみましたが、正常に動作しているようですが、変化は見られません。これは、C#.NETのPInvokeを介して実装しています。適用可能なコード要素は次のとおりです。
変更を加える
StructuredStorageNodeクラスの名前定義。
multithreading - 構造化ストレージ
構造化ストレージ形式のファイルがあります。この形式がスレッドによって同時にアクセスされるかどうか疑問に思っていました。
つまり、複数のスレッドが異なるストリームを読み取って一度に処理します。目的は、ファイルをより速くロードすることです。
ファイルを参照するときは、CAD 情報を表すファイルを参照します。
c++ - カスタム構造化ストレージ IPropertySetStorage
IPropertySetStorage
既存のファイルに a を追加しようとしていIStorage
ます。私が書く予定のプロパティとその値は、私のデザインに合わせてカスタマイズされます (いくつかの int やいくつかの文字列などを保存する場合があります)。IStorage
既存のファイル タイプに準拠しようとしているわけではありません。
API とそのドキュメントは、既存のファイル形式を対象としているように感じます。これはカスタムであるため、(これまでのところ) 私が見つけた例は混乱を招くだけでした。
質問
- (param 1) 何
FMTID
を渡しますか? データ フィールドをすべてゼロにすることはできますか? 私はそれを補うことができますか? - (param 2) CLSID は
nullptr
? そうでない場合、それは何ですか?親が使用した値を把握する必要がありIStorage
ますか? - (param 3) どの propset フラグが最適でしょうか? 文字列を格納するので、 を使用する必要があると考えています
PROPSETFLAG_DEFAULT
。 - (param 4)
IStorage
ハンドルは読み取り用に開いています (既存のランタイムへのプラグインのように実行しています)。今のところ私の最善の推測は、を使用することSTGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE
です。しかし、私は得ていますSTG_E_INVALIDFLAG
現時点ではまだ新しいを作成できていませIPropertySetStorage
んIStorage
が、カスタムを正常に作成し、IStream
後で開いてから読み取ることに注意してください。
私がやっていることにより関連するチュートリアルへのリンクは、非常に高く評価されます。
編集私のコードは既存のアプリケーションから呼び出され、既存のファイルで作業していることに注意してください。コードが呼び出されると、ファイルの root が渡されますIStorage
。これが、そのベースを使用したすべてのコードですIStorage
。
#4 で指摘したように、これは を返しますSTG_E_INVALIDFLAG
。
ole - OLE 構造化ストレージと同等
大量のデータを、いくつかのテキストと多数のファイルとともに 1 つのファイルに保存したいと考えています。過去に構造化 OLE を使用したことがありますが、気に入っています。しかし、今ではかなり古い技術のようです。HDFファイル形式の使用も検討しました http://www.hdfgroup.org/HDF5/
ただし、異なるマシンからの単一書き込み複数読み取りはサポートしていません。ファイルベースのスケーラブルなストレージが必要です。
これと同じですが、高速で実装が簡単な、使用できる他の単純なファイル形式はありますか?
シャシ
c++ - StgOpenStorageEx は STG_E_FILEALREADYEXISTS を返します
StgOpenStorageEx が複合ドキュメントを読み取り専用で開いたときに STG_E_FILEALREADYEXISTS を返す理由を見つけようとして苦労していました。意味がありませんでした。ファイルはそこにあり、何も作成しようとしていませんでした。開くだけです。オンラインで答えが見つからなかったので、ここで見つけた答えを共有したいと思いました。