0

2 つのサブモジュールを持つアプリケーションがあります。また、モジュールのアクティビティをログに記録するために記述されたカスタム Log クラスです。私が取り組んでいる要件は、各モジュールが同じ名前のログ ファイルを作成し、それにログを書き込む必要があることです。それをよりよく説明するには、アプリケーションの別のセッションが module2 で開始されたときに、module1 が app.log にログを書き込んでいる最初の実行を検討してください。また、app.log を作成して書き込みを開始する必要があります。ただし、その前に、古い app.log の名前を app.log.1 に変更する必要があります。

1 つのモジュール関数の名前を変更できないログ ファイルが開いているときに直面している問題。ウィンドウ 7 で C++ を使用しています。

4

2 に答える 2

2

Windows はこれを許可しません。書き込みまたは読み取りのためにファイルを開くと、ファイルはロックされ、ファイルが開いている間は名前の変更や削除などの操作を実行できません。

デザインを再考する必要があるかもしれません。各サブモジュールに固有の名前のログ ファイルがあるようにします。または、複数のソースからログ入力を受け取り、それらを 1 つのファイルに多重化できるログ モジュールを使用します。

于 2013-11-13T08:28:46.550 に答える
1

これは、Log クラス オブジェクトへのアクセスを同期することで実現できます。アプローチは次のようになります。

  1. アプリケーションは起動時に Log クラス オブジェクトを作成します。 Logging へのアクセスを保護する Synchronization オブジェクト (Mutex など) を作成します。
  2. Log メソッドに、2 つの異なるモジュールからのアクセスを区別するフラグを受け入れるようにします。
  3. Module1 がアクセス権を取得し、ロギングを開始します
  4. module2 が書き込みたい場合、Logger は別のモジュールからのログ要求があることを検出し、ファイルを閉じて名前を変更し、同じ名前の別のログ ファイルを作成します。
于 2013-11-13T08:55:11.503 に答える