簡體   English   中英

寫入C#中另一個進程(Windows服務)正在使用的文件

[英]Write to a file that is being used by another process (Windows Service) in C#

有什么辦法可以寫入另一個進程正在使用的文件? 我有一個Windows服務,該服務創建日志並鎖定文件,直到該服務停止為止。 我還有另一個程序可以備份文本文件的內容並清除原始文件。 當我嘗試使用C#程序備份並清除其他服務正在使用的日志時,會產生錯誤:“該進程無法訪問該文件,因為該文件正在被另一個進程使用”。

我一直在搜索,並且知道您必須檢查文件是否被鎖定,然后等待該文件被另一個程序使用。 我需要一個能夠寫入鎖定文件的代碼。 那可能嗎?

這是我的示例Windows服務代碼,每3分鍾記錄一次文件:

private Timer timer = new Timer();
private static FileStream fs = new FileStream(@"D:\Hello.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
private StreamWriter sw = new StreamWriter(fs);

protected override void OnStart(string[] args)
{
    timer.Elapsed += new ElapsedEventHandler(WriteText);
    timer.Interval = 50000; //5 minutes
    timer.Start();
}
public void WriteText(object source, ElapsedEventArgs e)
{
    sw.WriteLine(DateTime.Now);
}
protected override void OnStop()
{
    sw.Close();
    sw.Dispose();
    fs.Close();
    fs.Dispose();   
}

對於我來說,除非服務停止,否則不要關閉流。

您是否要使用StreamWriter? 您可能要考慮使用log4net之類的東西進行日志記錄。 您可以將其配置為滾動日志,然后從那里進行備份,或者只是將其用作備份。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM