请问下面代码有什么问题吗?我每30秒执行一次该方法,提示被另一个进程占用
private void WriteRequestLog(Dictionary loginLogDic)
{
StringBuilder logStrBuilder = new StringBuilder();
foreach (var d in loginLogDic)
{
logStrBuilder.Append(string.Format("{0};{1}", d.Key.ToString(), d.Value.ToString("yyyy-MM-dd HH:mm:ss.fff")));
logStrBuilder.Append("\r\n");
}
lock (syncFileObj)
{
string reqLogFile = string.Format("{0}\\RequestLog_{1}.txt", RequestLogDirectory, MachineName);
if (File.Exists(reqLogFile))
File.Delete(reqLogFile);
using (StreamWriter sw = new StreamWriter(reqLogFile,false))
{
sw.WriteLine(logStrBuilder.ToString());
}
}
}
14 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
是不是文件被占用啊?可能是删除文件操作有些延迟,而你执行写入又过于频繁。可以这样不,不删除文件每次打开存在的文件就使用FileMode.Truncate清空。代码如下
String path="";
FileMode fileMode=FileMode.Truncate;
if(!File.Exists(path))
fileMode=FileMode.Create;
using (FileStream fs = new FileStream("path", fileMode, FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine("123"); sw.Flush();
}
}
喵喵时光机
TA贡献1846条经验 获得超7个赞
光这段代码感觉没有什么问题,如果你这个问题很容易复现的话,在出现异常的时候把程序暂停住,用一些外部工具查看这个文件是否被其它进程打开了,微软的ProcessExplorer,win7的任务管理器,unlocker等都有这个功能。
PS:如果用工具查看到打开该文件的是你自己的程序进程,则说明你自己在其它地方打开了这个文件,那就是你的代码逻辑有问题了。
- 14 回答
- 0 关注
- 815 浏览
添加回答
举报
0/150
提交
取消