繁体   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