程序运行一段时间后就会报
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是这么加的吧?
为什么还是会报错
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是这么加的吧?
为什么还是会报错
得这么写。
{
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();
}
这样你也不用去锁了吧此类型的任何公共 static 成员都是线程安全的。
用了using (StreamWriter sr = new StreamWriter(FileName, true))
还sr.Close();了,怎么还会出现这个情况,最后我没办法就直接try{}抛出空error了。
private static Mutex mut = new Mutex();
……
finally
{
mut.ReleaseMutex();
}
标记一下!
xiejie59624865
别急嘛