0

私は自分のアプリケーションのログ ファイルを持っています。ログ ファイルに対してサイド アプリケーションによる操作を行います。操作の最後に、ファイルを削除したい-ファイルが使用されているため不可能なので、空にしたい-コンテンツを削除します。

私は試した:

 using (FileStream stream = File.Open(query.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
        {
            using (StreamWriter writer = new StreamWriter(stream, true))
            {
                writer.Write("");
                reader.Close();
            }
        }

と:

using (FileStream stream = File.Open(query.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
    {
        stream.SetLength(0);
        stream.Close();
    }

と:

System.IO.File.WriteAllText(@"path", string.Empty);

動作しません。

ファイルの内容を上書きするには?

4

2 に答える 2

2

全くない。ファイルが別のプロセスで使用されているため、クラッシュします

まあ、それはおそらく別のプロセスではなく、おそらくあなたのものです。これは、ログ ファイルを閉じた後に行う必要があります。しかし、それにはもっと一般的な修正があります。ログ ファイルを作成するコードに戻り、FileShare.Delete オプションを追加します。

このオプションを使用すると、使用中のファイルを削除できます。ログ ファイルがまだ開いている場合でも、コードで File.Delete() を使用するだけで済みます。これにより、ファイルは「削除保留中」の状態になり、ファイルを開こうとすると、アクセス拒否エラーが表示されます。ファイルへの最後のハンドルが閉じられると、ディスク上のファイルは自動的に消えます。

もう 1 つの便利なオプションは、FileOptions.DeleteOnClose です。今では完全に自動化されており、何もしなくてもファイルは自動的に削除されます。あなたの場合、どちらが最適かはわかりません。おそらく、プログラムがクラッシュしたときにログ ファイルを削除したくないので、FileShare.Delete が最適です。

于 2012-12-17T12:51:17.313 に答える
0

以下のコードも使用できます

System.IO.File.WriteAllText(@"Path of your file",string.Empty);
于 2012-12-17T10:09:12.737 に答える