无法写入另一个进程exp繁忙的文件,多线程

时间:2010-11-29 10:54:18

标签: c# multithreading file

你好我使用多线程放置日志有问题,我的功能就像这样

    public static void AddToLog(string message)
    {
            using (FileStream fs = new FileStream(ExeDir + @"\logs.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                using (StreamWriter mStreamWriter = new StreamWriter(fs))
                {
                    mStreamWriter.BaseStream.Seek(0, SeekOrigin.End);
                    mStreamWriter.WriteLine(message + " at " + DateTime.Now.ToLongTimeString() + "." +
                                            DateTime.Now.Millisecond);
                    mStreamWriter.Flush();
                }
            }
    }

好吧,我每次创建这个对象,所以我无法锁定它,问题是当我打开它时,最好的方法是什么?

3 个答案:

答案 0 :(得分:3)

  

我在使用多线程放置日志时遇到问题

您应该使用日志记录库。有很多可用于.NET,例如log4net。另见:

如果您想自己实现它,那么请将应用程序的日志记录分解为单个组件。在应用程序启动时打开文件一次,并通过定义良好的接口执行日志记录,并在实现中进行适当的同步。不要直接从应用程序中的许多不同位置写入同一个日志文件。

答案 1 :(得分:1)

同时查看FileShare修饰符(http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspx)

(但是用于记录库建议的+1)

答案 2 :(得分:1)

您的方法已经是静态的,如果您使用的是应用程序的一个实例,只需添加

  private static object logLock = new object();
  public static void AddToLog(string message)
  {
     lock(logLock)  // or with a timeout
     {
        ...

但我认为@Mark有更好的建议来使用特殊的库。