为了账号安全,请及时绑定邮箱和手机立即绑定

写文件被另一个进程占用问题

写文件被另一个进程占用问题

慕标琳琳 2018-12-06 23:51:48
请问下面代码有什么问题吗?我每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 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

找到原因了,是因为开启了web园,造成多个工作进程同时写一个文件
查看完整回答
反对 回复 2018-12-09
?
MM们

TA贡献1886条经验 获得超2个赞

没什么问题,你应该看看文件到底被谁占用了。
查看完整回答
反对 回复 2018-12-09
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

lock (syncFileObj) 是否有问题,锁得住否
查看完整回答
反对 回复 2018-12-09
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

这个应该锁得住,因为该对象是一个单例类中的成员变量
查看完整回答
反对 回复 2018-12-09
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

@Brave.Y:  那就是 其它地方 使用到这个文件了,检查一下
查看完整回答
反对 回复 2018-12-09
?
蝴蝶不菲

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(); } }
查看完整回答
反对 回复 2018-12-09
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

光这段代码感觉没有什么问题,如果你这个问题很容易复现的话,在出现异常的时候把程序暂停住,用一些外部工具查看这个文件是否被其它进程打开了,微软的ProcessExplorer,win7的任务管理器,unlocker等都有这个功能。 PS:如果用工具查看到打开该文件的是你自己的程序进程,则说明你自己在其它地方打开了这个文件,那就是你的代码逻辑有问题了。
查看完整回答
反对 回复 2018-12-09
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

有什么工具可以看到哪个进程占用了文件吗?
查看完整回答
反对 回复 2018-12-09
?
喵喔喔

TA贡献1735条经验 获得超5个赞

@Brave.Y: 工具名称“who lock me”
查看完整回答
反对 回复 2018-12-09
?
慕村225694

TA贡献1880条经验 获得超4个赞

是不是你的文件的操作没有dispose 或者你干脆找到进程,kill
查看完整回答
反对 回复 2018-12-09
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

本地跑没有问题,放到服务器跑的时候,不知道被什么进程占用,因为没办法登陆到服务器,所以不知道怎么搞了。
查看完整回答
反对 回复 2018-12-09
?
手掌心

TA贡献1942条经验 获得超3个赞

sw.Flush(); sw.Close();
查看完整回答
反对 回复 2018-12-09
  • 14 回答
  • 0 关注
  • 815 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信