1

次のように、ファイルを削除するコードを記述します。

File logFile = new File(fileName);

deleteSuccess = logFile.delete();

しかし、Veracode:リソースがリリースされていないことについて警告をください。ファイルを削除した後にリソースを解放する方法を知りたいです。

Veracodeエラーは次のようになります

ベラコード:

説明
アプリケーションは、再利用できるようになる前に、システムリソースを解放できません(または誤って解放します)。この状態は、データベース接続やファイルハンドルなどのリソースでよく発生します。ほとんどの未リリースのリソースの問題は、一般的なソフトウェアの信頼性の問題を引き起こしますが、攻撃者が意図的にリソースリークを引き起こす可能性がある場合、リソースプールを使い果たすことにより、サービス拒否攻撃を開始できる可能性があります。

推奨事項リソースが作成または割り当てられると、開発者はリソースを適切に解放し、有効期限または無効化のすべての潜在的なパスを考慮する責任があります。すべてのコードパスがリソースを適切に解放することを確認してください。

4

2 に答える 2

1

それがあなたのコード全体であると確信していますか?何も悪いことはないからです。Fileオブジェクトは、ファイル名の単なるラッパーであり、リソースは割り当てられていません。また、deleteメソッドは適切なOS関数を呼び出すだけであり、後でクリーンアップする必要はありません。

閉じる必要があるのは、ファイルから派生したストリームです(ただし、ストリームはないようです)。

于 2010-09-09T03:30:37.083 に答える
0

削除操作が成功したら、オブジェクトを明示的に無効にすることを試みることができFileます (必要に応じて、返されたブール値を確認しますが、削除操作が失敗した場合の意図についてはわかりません)。少なくともそのようにすれば、Fileオブジェクトへの参照が失われるという事実が保証されるため、関連するすべてのオブジェクトもガベージ コレクションの対象となります。

VercaCode がこれを警告として引き続きフラグを立てる場合は、この問題を無視することを正当化できると思います.

提案された変更は何の価値も追加しませんが、特に File オブジェクトが範囲外になったときにガベージ コレクションの対象となる場合は、この警告を取り除きたい場合は、このプラクティスを採用できます。

于 2010-09-09T05:02:29.507 に答える