[C#中的FileStream]为什么每次想访问一个文件,都提示被另外的线程占用?

bianxinhuan 2013-09-10 11:48:01
我如下这样写,每次都会抛出被占用的异常,其实这个文件只有我自己的这个方法访问,用来记录日志的,不定时会写入记录.也尝试过不用using的方式,把流close()和dispose().有解决办法吗,各位前辈!
 using (FileStream missedXmlStream = new FileStream(missedPath, FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
{
XDocument missedXml = XDocument.Load(missedPath);
var root = missedXml.Root;
var secondNode = root.Element(type);
var page = new XElement("page", new XAttribute("category", category), new XAttribute("Url", url));
secondNode.Add(page);
missedXml.Save(missedXmlStream);
missedXmlStream.Flush();
}
真的,关于IO,多线程这些操作真的充满无力感,是因为我不明白它内部原理吗?
...全文
475 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
silwol 2013-09-25
  • 打赏
  • 举报
回复
这样试试?
                XDocument missedXml = XDocument.Load(missedPath);
                var root = missedXml.Root;
                var secondNode = root.Element(type);
                var page = new XElement("page", new XAttribute("category", category), new XAttribute("Url", url));
                secondNode.Add(page);
 using (FileStream missedXmlStream = new FileStream(missedPath, FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
            {
                missedXml.Save(missedXmlStream);
                missedXmlStream.Flush();
            }
快乐的小二兔 2013-09-25
  • 打赏
  • 举报
回复
引用 1 楼 yuwenge 的回复:
熟读 计算机组成原理
背诵 clr via c# 全书
卧_槽 2013-09-25
  • 打赏
  • 举报
回复
引用 2 楼 jiaoshiyao 的回复:
[quote=引用 1 楼 yuwenge 的回复:] 熟读 计算机组成原理
你明显是在坑人[/quote] 居然被发现了
火拼阿三 2013-09-25
  • 打赏
  • 举报
回复
引用 2 楼 jiaoshiyao 的回复:
[quote=引用 1 楼 yuwenge 的回复:] 熟读 计算机组成原理
你明显是在坑人[/quote]
jiaoshiyao 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 id270 的回复:
[quote=引用 1 楼 yuwenge 的回复:] 熟读 计算机组成原理
背诵 clr via c# 全书[/quote]遇此问题需挥刀自宫后围大街跑三圈方才能解答
jiaoshiyao 2013-09-24
  • 打赏
  • 举报
回复
引用 1 楼 yuwenge 的回复:
熟读 计算机组成原理
你明显是在坑人
卧_槽 2013-09-11
  • 打赏
  • 举报
回复
熟读 计算机组成原理
去年应朋友需要用C# 2.0写的一个按热键模拟鼠标单击操作程序,类似按键精灵,翻出来分享 实现功能:设定模拟鼠标单击/秒次的系统热键(热键自动保存),设定每秒单击的间隔毫秒数,按下设定好的热键程序便开始模拟鼠标单击操作,再按一次热键程序停止模拟并统计模拟鼠标单击的次数与时间误差。 演示程序:\HookSimulateMouse\bin\Debug\HookSimulateMouse.exe(需MS .NET Framework 2.0运行库支持) 程序界面: 1.设定时间间隔范围:1ms-1000ms,如:900ms 2.设置快捷键,如:Ctrl+Alt+W 将鼠标移至要模拟单击处按热键,于下一秒开始后计时,windowsXP不是实时系统,系统时间误差在20-55ms,而且通过程序获得(特别在CPU占用率高时)都会有延迟,要高精度需要凋API或者取CPU时钟频率,还要计算开机以来运行时长ms数,而且那是计时不是定时。 如:您设定系统时间ms数为900,于5点18分20秒569毫秒按下了快捷键,程序从下一秒0ms开始计时,在5点18分21秒900-908毫秒之间程序模拟一次鼠标单击(鼠标单击可能有8ms延迟) 以此类推直到您再按一次热键程序停止模拟并统计单击次数及毫秒误差(1s=1000ms) 按关闭X或双击桌面右下角系统托盘程序图标可隐藏/显示程序界面,至桌面右下角系统托盘 通过本C#程序源码可学习: 程序窗体最大化/最小化还原到系统托盘 调用系统DLL(user32.dll)设定全局热键控制程序,模拟鼠标单击操作 调用timer控件计时 Thread线程控制 FileStream文件流读写操作

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧