請問下面代碼有什么問題嗎?我每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 關注
- 868 瀏覽
添加回答
舉報
0/150
提交
取消