现在有个文件Data.txt文件,有另外一个程序在定时往里面写入数据,而我要做的就是定时从这个文件中读取数据! 这牵涉到一个文件锁的问题,我用的是FileStream流串一行一行读的,但是每当人家那个程序往里面写入数据的时候,我这边肯定会报错:"进程无法访问×××文件,因为被其他进程在调用",我想问问C#中是否有文件锁之类的东西,能知道该文件正在被使用,我可以Sleep几秒钟在取数啊??????
   谢谢各位达人了!

解决方案 »

  1.   

    用MemoryStream吧,当MemoryStream的东西写道一定的容量的时候在写到Data.txt文件里。你读取文件信息从MemoryStream中读取吧!
      

  2.   

    1.如果写文件的工程是你自己掌控的,你可以在那里面设置一个,写的时候,别人可读!这样你的读就没问题了
    2.如果你无法控制写工程,那么你可以用try...catch来处理,如果没人写,正常读出,如果有人写,你不能读,进入catch块,然后先Thread.Sleep(millisecond);然后在去检查.
    只是一个建议,等待高手得指点
      

  3.   

    回复2楼:
        try{}catch{}当然不是什么好的方法,这样的话,所有的程序中遇到的问题都可以用这玩意来处理,明显失去了意义。   谢谢了! 我是个菜鸟,不过觉得这个问题好像应该不是很难吧。
        来个高人稍微指点一下这个很常见的问题撒!   ^_^
      

  4.   

    写一个此文件的专用操作类,操作代码放在lock语句块里面~
      

  5.   

    public void Read()
            {
                if (!File.Exists(path))
                {
                  // 如果文件不存在,处理过程
                }
                else
                {
                    try
                    {
                      // 读取文件中的内容
                    }
                    catch (Exception e)
                    {
                        Thread.Sleep(10);
                        Read();
                    }
                }
            }
      

  6.   

    首先你要确定调用文件的那个程序是否使用了锁,如果没有使用锁,那么你程序中使用文件锁也就没有什么意义了,只能用try catch 来做了,如果对方程序使用了文件锁的话,你也用文件锁就可以了,关于锁你可以参看http://blog.csdn.net/tjvictor/archive/2007/01/20/1488290.aspx
      

  7.   

    那个写入程序是用VB写的,就是一条普通的Print命令一行一行写入数据。  应该没加什么锁吧。看来还真得用try..catch了,晕!
       谢谢各位了!!