通过lock(fileName) 防止对文件的并发访问,安全吗?如不安全,用什么代替? lock (fileName) ,只是锁定了fileName对象(String),对文件本身并无多大作用和意义。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般是定义一个静态的对象 来LOCK 因为你lock的是函数的参数,相当于局部变量,所以根本无效。即便你lock了私有静态变量,但是也lock不住别的程序对文件的访问。 有点复杂,自己没有做过,说下思路。因为要锁定的对象是不固定的,所以不能直接用lock来锁定。应该先建立一个锁定状态表,比如可以用一个数组,当有线程正在访问文件时,把文件名放到表里,访问完成以后从表里移除。这样,线程在访问文件前,先查询状态表中是否已经有这个文件,如果有就等待,直到其它线程完成访问后再继续。为了避免其它程序对文件的访问,可在打开文件时使用FileShare参数对文件设置共享锁,这样在文件打开的期间,其它进程是无法对文件进行指定的某些操作的。 求一详细的加密方法 C# sendmessage问题 visual studio 2008 的问题 .net出现怪现象,大虾帮忙! 请问大家VS2005进展如何,估计什么时候出来呢?? 快进来看看呀!!懂点网络知识的都知道的问题 送 100分呀 做C#到底有没有前途? SOS:在C#文件操作中,如何定位到确定的"行". 有些B/S结构编辑Word的经验!共享、讨论! 在C# asp.net 中怎么发邮件? PHP序列化的字段格式如果用C#来解析? chart控件的Legend和Series都是"图例"的意思吗?
即便你lock了私有静态变量,但是也lock不住别的程序对文件的访问。
因为要锁定的对象是不固定的,所以不能直接用lock来锁定。应该先建立一个锁定状态表,比如可以用一个数组,当有线程正在访问文件时,把文件名放到表里,访问完成以后从表里移除。这样,线程在访问文件前,先查询状态表中是否已经有这个文件,如果有就等待,直到其它线程完成访问后再继续。
为了避免其它程序对文件的访问,可在打开文件时使用FileShare参数对文件设置共享锁,这样在文件打开的期间,其它进程是无法对文件进行指定的某些操作的。