2012-12-17 15 views
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); 

Notihg工作。

如何覆蓋文件內容?

回答

0

你也能

System.IO.File.WriteAllText(@"Path of your file",string.Empty); 
+0

根本不是。它會崩潰,因爲文件正在被另一個進程使用 – Harry

2

根本不使用下面的代碼。它會崩潰,因爲文件正在被另一個進程使用

那麼,它可能不是另一個進程,它可能是你的。關閉日誌文件後,您必須執行此操作。但是有一個更一般的解決方案。回到創建日誌文件的代碼並添加FileShare.Delete選項。

該選項允許刪除正在使用的文件。您現在可以簡單地在代碼中使用File.Delete(),即使日誌文件仍然打開。這會使文件處於「刪除掛起」狀態,任何試圖打開它的人都會被拒絕訪問錯誤。當文件的最後一個句柄關閉時,磁盤上的文件將自動消失。

另一個有用的選項是FileOptions.DeleteOnClose。現在它是完全自動的,該文件會自動刪除,而無需執行任何操作。我無法確定哪一個最適合您的情況,您可能希望避免在程序崩潰時刪除日誌文件,以便FileShare.Delete是最好的選擇。

+0

我無法更改文件創建。它是由EnterpriceLibrary創建的,並且只有在應用程序完成工作時纔會被釋放。想法是在晚上將客戶端的日誌文件移除到服務器中,我必須在複製到服務器後立即刪除該文件,以免被複制兩次。 – Harry

+0

顯然,如果你不能改變任何東西,這將很難解決。一種理智的做法是僅僅不復制日誌文件。 –

+0

我可以改變,我必須去做。但這是一個新問題,謝謝。 – Harry

相關問題