找到最后一条timer2写入的日志,看到底报什么错误了还是如何了
你确定不是SendLog(_timer.LogFolder, "locate "+ex.ToString());这个代码本身就异常了?
你确定不是SendLog(_timer.LogFolder, "locate "+ex.ToString());这个代码本身就异常了?
解决方案 »
- 像窗体发送消息,模拟键盘按键.[100分]
- 这个图表我应该怎么做,帮帮小妹吧
- remoting问题,提示异常:remoting 未处理serializationException,Invalid type code in stream 'Invalid'..[在线急等]
- 怎么样在CS设CheckBoxList文本字的颜色??
- 关于socket文件传送的问题,小D 初学,请高人指点
- 数据库问题
- 控件异常的捕捉,谢谢解答
- 怎样取得用户点击的菜单的名称?
- 帮忙!
- 请问,要获得字段的内容用什么方法?
- C# stopwatch的问题
- C# 一个checkbox实现全选和取消(就是为了确认收货用的,商品处于卖家发货这个状态是才可以有确认收货)
sendlog 函数代码如下:
public void SendLog(string logFolder, string error)
{
StringBuilder builder = new StringBuilder();
//Directory.SetCurrentDirectory("C:\\test\\log");
if (!Directory.Exists(logFolder)) //如果文件夹不存在则创建
{
Directory.CreateDirectory(logFolder);
}
Directory.SetCurrentDirectory(logFolder); string path = Directory.GetCurrentDirectory() + "\\download" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + ".txt"; builder.Append(string.Concat(new object[] {
"\r\n\r\nlog "+DateTime.Now.ToShortTimeString()+"\r\n\r\n", error.ToString()
}));
StreamWriter writer = new StreamWriter(path, true, Encoding.UTF8);
writer.Write(builder);
writer.Close();
}locate 只是我做的一个标记,然后log中有如下报错:
System.IO.IOException: 文件“D:\EDI\BabyCare\Log\download2015-1-7.txt”正由另一进程使用,因此该进程无法访问该文件。
这个对 timer有影响吗?
但是你在catch里又执行了写文件的操作,而写文件的代码里没有加try,catch,导致如果写文件失败,整个方法抛个异常,finally也不会执行了
原因就是你没有对多线程写同一个文件进行加锁控制,导致多线程同时访问同一个文件的时候抛异常
再问一下,是不是用了 using 就相当于加锁了
using (StreamWriter sw = new StreamWriter(s1, false, Encoding.GetEncoding("gb2312")))
{
sw.Write(builder);
sw.Close();
}
用了using,出了代码块,括号里定义的对象就会自动释放,这跟锁完全不沾边
不好意思,还想问下,有关锁文件的事情,网上说
FileStream objFileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.None);
共享方式打开文件,就可以解决了,用这个可以吗?或者您有代码可以让我参考一下吗,谢谢了