代码之家  ›  专栏  ›  技术社区  ›  kosnkov

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

  •  1
  • kosnkov  · 技术社区  · 14 年前

    你好,我在使用多线程放置日志时遇到问题,我的函数如下所示

        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 回复  |  直到 14 年前
        1
  •  1
  •   Henk Holterman    14 年前

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

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

    但我认为,@Mark有更好的建议来使用一个特殊的图书馆。

        2
  •  4
  •   Community CDub    8 年前

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

    你应该使用日志库。.NET有很多可用的工具,例如 log4net . 另见:

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

        3
  •  1
  •   Tim Barrass    14 年前

    也可以查看FileShare修饰符(http://msdn.microsoft.com/en-us/library/system.io.FileShare.aspx)

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