2016-06-21 20 views
-3

パケットデータを取得してテキストファイルに書き込むためのUDPクライアントコンソールアプリケーションを開発しました。テキストファイルにデータを書き込むためにストリームを使用しています。テキストファイルは1日を通して書き込まれるため、ストリームを破棄することはできません。ファイルは毎日生成され、前日に書かれたテキストファイルを削除する必要があります。しかし、ファイルを削除することはできません。ファイルが別のプロセスで使用されたというエラーメッセージが表示されます。前日のファイルは実際には現時点では書き込まれていませんが、依然としてストリームにアタッチされているようです。ストリームを破棄または閉じることができないため、特定のプロセスに添付されている古いテキストファイルを削除する方法がありますか?ありがとうございました。ファイルをストリームに添付している間にファイルを削除する方法

+0

ストリームの書き込みを終了したときに、そのストリームを廃棄するのを止めるのは何ですか? – Baldrick

+0

@Baldrick - プロジェクトの全体的な機能に関連しています。私はテキストファイルに暗号化されたデータを書き、別のWindowsフォームアプリケーションでそれらを解読しています。暗号化と復号化の両方のプロセスで同じ暗号化キーが使用され、プロセスの一貫性を維持するためには同じストリームを維持する必要があります。あなたが示唆したように、私はその日の終わりにストリームを破棄しようとしましたが、結果として破損した(復号化された)データによる解読プロセスに影響を与えました。ありがとうございました。 – Sugandika

+1

あなたは、あなたが避けられない方法で物事を行うことで、回避策を講じようとしている設計上の問題があるようです。あなたのファイルストリームをきれいに整理できるように暗号化メカニズムを再設計することを強くお勧めします。この方法でファイルがロックされていると、ウィンドウでそのファイルを削除することはできません。 – Baldrick

答えて

1

ストリームを正しく廃棄していないようです。彼らはまだメモリに「生きている」。ストリームがガベージコレクションを維持する理由を理解する必要があります。たとえば、すべてのストリームの参照をグローバルプロパティ(またはそれ以上のマネージャ)に保存し、それが作成されたタイムスタンプDateTimeを保持するなど、これを行うことができます。こうすることで、タイムスタンプをチェックすることで、どのストリームを閉じることができるのかを特定できます。 を閉じるの両方をストリームに保存してください()。

ストリームはコストがかかり、使用量を最小限に抑える必要があることに注意してください。

+0

Wicher Visser and Baldrick - ありがとうございます。スレッドを使用する設計を変更しなければならず、解読プロセスに影響を与えずにストリームを安全に処分できました。 – Sugandika

関連する問題