程序运行一段时间后就会报
System.IO.IOException: 文件“D:\空调联动new\空调联动服务端多串口\DetectorServiceFrm\bin\Debug\Log\Log_2010-9-8.txt”正由另一进程使用,因此该进程无法访问该文件。
 /// <summary>
        /// 向日志文件中添加日志
        /// </summary>
        /// <param name="str"></param>
        public static void AddLogToTxt(string str)
        {
            if (System.Configuration.ConfigurationManager.AppSettings["Log"] != "1")
            {
                return;
            }            string folder = Process.GetCurrentProcess().MainModule.FileName;
            folder = folder.Substring(0, folder.LastIndexOf("\\") + 1) + "Log";            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }            string FileName = folder + "\\" + System.Configuration.ConfigurationManager.AppSettings["LogFileName"] + DateTime.Now.ToShortDateString() + ".txt";            Object lockthis = new object();
            lock (lockthis)
            {
                if (!File.Exists(FileName))
                {
                    StreamWriter sw = File.CreateText(FileName);
                    sw.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + "  " + str);
                    sw.Close();
                    sw.Dispose();
                }
                else
                {
                    using (StreamWriter sr = new StreamWriter(FileName, true))
                    {
                        sr.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + "  " + str);
                        sr.Close();
                    }
                }
            }        }我已经加了lock了
lock是这么加的吧?
为什么还是会报错

解决方案 »

  1.   

    static Object lockthis = new object();
    得这么写。
      

  2.   

    锁定方法内的object相当于没有锁定;
      

  3.   

    用lock,是锁不住这个的,必须用Mutex来锁住,具体用法如下:private static Mutex mut = new Mutex();try
    {
    mut.Waitone();
    if (!File.Exists(FileName))
                    {
                        StreamWriter sw = File.CreateText(FileName);
                        sw.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + "  " + str);
                        sw.Close();
                        sw.Dispose();
                    }
                    else
                    {
                        using (StreamWriter sr = new StreamWriter(FileName, true))
                        {
                            sr.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + "  " + str);
                            sr.Close();
                        }
                    }
    }
    finally
    {
        mut.ReleaseMutex();
    }
      

  4.   

    为什么不试试把StreamWriter声明为static?
    这样你也不用去锁了吧此类型的任何公共 static 成员都是线程安全的。
      

  5.   

    好了告诉我一声,我也是出现这个问题,我也很纳闷!
    用了using (StreamWriter sr = new StreamWriter(FileName, true))
    还sr.Close();了,怎么还会出现这个情况,最后我没办法就直接try{}抛出空error了。
    private static Mutex mut = new Mutex();
    ……
    finally
    {
      mut.ReleaseMutex();
    }
    标记一下!
      

  6.   

    好了,结贴.
    xiejie59624865
    别急嘛