2016-09-14 4 views
0

ログファイルを空にする方法については、多くの説明があります。C#でロックされたログファイルの内容をクリアする

のように:私が見つけ

File.WriteAllText(activeTab.FileName, string.Empty); 

しかし、この例および他の例はすべて同じ問題を抱えています。ログファイルが現在別のプロセスによってロックされている場合は動作しません。

ルビーでは、私は​​を使用することができますが、削除しないでログファイルを空にするというタスクがあります。

私はPowershellでclc <filename>を使ってこれを行うことができます。

https://github.com/PowerShell/PowerShell/blob/c1faf1e6e10fc1ce45e84ef6f49ae7136c67a111/src/Microsoft.PowerShell.Commands.Management/commands/management/ClearContentCommand.cs

しかし、正直なところ、私はそれが他のクラスから継承も、このコードがどのように動作するか理解していない: ソースが今ここにご利用いただけます。

一般的なプログラム/クラスで使用できるC#の実装はありますか?

+0

ファイルがロックされている場合、またはそれを変更( "空")する。あなた自身のロールを張そうとする以上のことを私が推薦する第三者ロギングライブラリがたくさんあります。ライブラリを使用すると、これらのライブラリのいくつかが私が覚えていて、非常に堅牢で設定可能な限り、心配する必要はありません。私の個人的なお気に入りは[Log4Net](https://logging.apache.org/log4net/)ですが、[NLog](http://nlog-project.org/)も非常に人気があります。 – Igor

+1

IMO、これは妥当で安全なことではありません。ファイルロックを保持している誰がそれを解放するのかを理解する必要があります。 – jlew

+0

他のプロセスのファイルロックを破ることはできません。あなたができることはどこかでデータを待ち行列に入れ、ロックが解除されるのを確認してから、あなたのアクション(編集/削除/クリア)を実行します。 –

答えて

0

ファイルがこのスニペットを使用して、私の場合にクリアできることが判明した:あなたは(*あなたが他のプロセス/スレッド* =)は、それを削除することはできません

要するに
var stream = new FileStream(FileName, FileMode.Truncate, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete); 
    stream.Close(); 
+1

ファイルを開くとき、ほとんどのマネージコードツール(PowerShellを含む)が 'FileShare.Delete'オプションを省略しているという事実に関連しているようです。古い、ネイティブコードのアプリケーションでは、一般的にファイルを共有/削除して開くことができます。これは、私が古い方法がより好きな場合の1つです。 –

関連する問題