在详细介绍之前,我的程序是使用 C# .Net 4.0 在 Visual Studio 2010 中编写的。
我编写了一个程序,它将为每次运行生成单独的日志文件。日志文件以时间命名,精确到毫秒(例如20130726103042375.log)。如果当天的主日志文件尚不存在,该程序还将生成一个主日志文件(例如,*20130726_Master.log*)
在每次运行结束时,我想将日志文件附加到主日志文件。有没有办法检查我是否可以成功附加?然后重试Sleep
一秒钟或其他什么?
基本上,我有 1 个可执行文件和多个用户(假设有 5 个用户)。
所有 5 个用户将同时访问和运行此可执行文件。由于所有用户几乎不可能在完全相同的时间(最多毫秒)启动,因此生成单独的日志文件不会有问题。
但是,当我尝试将这些日志文件合并到主日志文件时,问题就出现了。虽然不太可能,但我认为如果多个用户附加到同一个主日志文件,程序会崩溃。
我使用的方法是
File.AppendAllText(masterLogFile, File.ReadAllText(individualLogFile));
我已经检查了该lock
对象,但我认为它在我的情况下不起作用,因为在一个实例中运行多个实例而不是多个线程。
我调查的另一种方式是try/catch
,像这样
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch {}
但我认为这并不能解决问题,因为 masterLogFile 的状态可以在那短暂的毫秒内改变。
所以我的总体问题是:是否有办法在 masterLogFile 未使用时附加到它,如果是,则在短暂超时后重试?或者,如果有另一种创建 masterLogFile 的方法?
提前谢谢你,很抱歉这么长的信息。我想确保我传达我的信息并解释我尝试或调查的内容,这样我们就不会浪费任何人的时间。
如果我可以提供更多信息来帮助您帮助我,请告诉我。