2012-05-09 9 views
0

C++コードを使用して特定のフォルダ(/ tmp /)にいくつかのファイルを保存します。 ファイルを保存する前にファイルを保存する前に使用可能なメモリを見つける方法はありますか?

  1. 十分なメモリがあるかどうかを確認する必要があります。そうでない場合は、ストレージから最も古いファイルを削除してから、新しいファイルを保存する必要があります。
  2. また、アクセスするには、自分のコードに格納されているファイルの詳細を知る必要があります。

私の実装は次のとおりです。

std::map<string IfileName, int iDetail> 

私は地図のインスタンスを作成し、私は、ファイルデータを作成するたびに、私は、マップに詳細を保存します。マップで 問題点は以下のとおりです。

  1. 地図が自動的にファイル名を並べ替えます。だから私は最も古いファイルを特定できません。
  2. ファイルがストレージ内で削除され、次にそのファイルについての詳細情報がマップにあるとします。
+0

「メモリ」と言えば、ディスク容量を意味すると思います。私は正しい? –

+0

@AlessandroTeruzziはい。間違った言葉を残して申し訳ありません。 – Balamurugan

+3

TOCTOU。ファイルを作成し、目的のサイズに展開します。失敗した場合は、ストレージを解放して再試行してください。 – Ben

答えて

0

hereを読むようにしてください。あなたの質問の第2部分について。なぜあなたはペアのベクトルを使いたくないのですか?この場合、push_backを使用できます。

+0

ベクターはいいですが、ファイル内容を直接検索する方法はありません。私は別のコードを使用してファイルの詳細値を取得するためにそれを検索する必要があります。 – Balamurugan

+0

std :: findメソッドを使用できます。唯一のポイントは、あなたがそれを使って遊ぶ必要があるということです...しかし、それは唯一の提案です:)または、私はintが記述であることに気付きました、あなた自身のfind関数を書くことができます。 – besworland

0

ある時点で、同様の問題を解決するためにマップとデュークの組み合わせを使用しました。トリックは、各value_type(マップとdequeの両方)をクロスポインタで拡張する必要があることです。したがって、特定のキーを使用してmap.find()を実行すると、受け取る値に両端キュー内の要素へのポインタがあります。およびその逆。 deque.pop_back()を実行するだけで最も古い(LRU)ファイルを見つけるには、マップに入るポインタを参照解除し、詳細を表示して、1つ以上のファイルを削除する必要があるかどうかを決定します。

関連する問題