3

同じディレクトリに同時にファイルを読み書きする2つのプログラムがあります(ただし、同時に同じ正確なファイルには書き込みません)。私は書き込み部分を完了しましたが、読み取りディレクトリ部分の半分の適切で機能する実装を取得するのに苦労しています。

ディレクトリ内のファイルは、次の命名スキームに従います。 Image-[INDEX]-[KEY/DEL]--[TIMESTAMP]

[INDEX]から増分し000000[KEY/DEL]イメージがキーフレームであるかデルタフレームであるかに基づいて交互に表示さ[TIMESTAMP]れ、ファイル作成時のUnix/Linuxエポック時間です。

現在、読み取りプログラムは、ディレクトリdirent.h内の画像を見つける必要があるたびに、一度に1つのファイルを(ライブラリを使用して)ディレクトリに読み込みます。ディレクトリが非常に大きくなると、この操作/メソッドはすぐに非常にリソースを消費し、最終的には失敗すると思います。だから、私は別の方法を見つけようとしています。初期化時にディレクトリ全体を読み取り、後でプログラムでアクセス/使用するためにファイル情報を配列に保存することを考えていました。次に、配列にないファイルが要求されると、プログラムはディレクトリを読み込んでファイルの配列を更新しますが、今回は初期化の最後に中断したところから開始します。

これは可能ですか?ディレクトリ内の既知のポイント(最後に「読み込まれた」ファイル)でディレクトリ内のファイル名の読み込みを開始するには?それとも、毎回最初からやり直す必要がありますか?

それとも、これを行うためのより良い方法はありますか?

ありがとう。

4

1 に答える 1

1

アンドリューが言ったように、解決しようとする前に、これが実際に問題であることを確認します。

ファイルが順不同で作成される可能性を無視できる場合、つまり、そのファイルの後に別のファイルが作成される前に処理したいファイルがない場合は、この方法を使用できます。

まず、ディレクトリ リスト全体を配列 or に読み込みますvector。次に、ファイルを反復するときは、ベクトルを反復するだけです。最後に、ファイルが見つからない場合、またはベクターの最後に到達した場合は、ファイルがさらに作成された場合に備えて更新します。

このロジックを、最後に読み取ったファイルを記憶するある種のコンテキスト オブジェクトにカプセル化したいと思うことは間違いありません。ベクトルをソートして最適化することもできます。

于 2013-03-12T16:38:42.770 に答える