ファイル I/O 抽象化を作成することを検討しています。ファイル内のランダムな位置から挿入または消去するための一般的なデスクトップ オペレーティング システムの API はサポートされていますか? または、私のインターフェイスで提供されている場合、ファイル内のすべてのバイトを手動でシャッフルする必要がありますか?
3 に答える
はい、シャッフルを自分で実装する必要があります。
API自体については知りません。しかし、Windowsと Linux のメモリ マップ ファイルは、この機能を迂回して提供します。したがって、その周りにラッパーを置くことができます。
C 標準ライブラリを使用すると、書き込み権限のあるファイルを開き、呼び出しfseek()
て特定の位置に移動し、その位置に書き込むことができます。のマニュアル ページfseek()
、または Web ページを参照してください: http://linux.die.net/man/3/fseek
しかし、上書きはあなたが得るすべてです。データを挿入または削除する場合は、その時点からファイル全体を書き直す必要があります。これは効率的ではありません。
したがって、ファイルを使用する代わりに、ある種のデータベースを使用してください。ファイルを書き直す必要なく、レコードを挿入したりレコードを削除したりできます。いくつかのインデックスを書き直すだけです。ただし、データを読み取るには、データベースを使用してインデックスを調べ、正しい順序でレコードを取得する必要があります。
PalmOS では、アプリが利用できるストレージはデータベース ストレージだけだと思います。しかし、ほとんどの環境ではデータベースが組み込まれていません。何かをインストールする必要があります。
SQLite はパブリック ドメイン (完全に無料で使用できます) であり、非常によくデバッグされているため、まずは SQLite を試してみることをお勧めします。そのパフォーマンスは驚くべきものではありませんが、ファイルを完全に書き換えて挿入と削除を行うよりはましです。また、SQLite は非常に人気があるため、バインディングはほとんどのプログラミング言語で利用できます。