none
急!无法访问已关闭的文件 RRS feed

  • 问题

  • 我设置了多个线程同时对一些文件进行操作

    经常在进行FileStream.Position 操作的时候就会出现

     

    未处理的“System.ObjectDisposedException”类型的异常出现在 mscorlib.dll 中。

    其他信息: 无法访问已关闭的文件。

     

    这样的信息,这是什么情况

     

    我也用这样的方式避免多个线程同时打开一个文件,

    Code Snippet

                    for (j = 0; j < 20; j++)
                    {
                        try
                        {
                            modifier = new FileStream(path + "\\" + (part % 10).ToString() + ".txt", FileMode.Open);
                            break;
                        }
                        catch { Thread.Sleep(100); }
                    }
                    if (j == 20)
                    {
                        modifier.Close();
                        right[m] = true;
                        return false;
                    }

     

     

    但是调试的时候还是会出现那样的信息,难道FileStream 还会自动关闭吗
    2008年8月17日 1:23

答案

  • 你好!
        使用lock关键字加锁就可以了,我大致给你写一下:
        lock(文件流对象)
        {
            你对文件流的操作;
        }
        有问题在来问我吧!
    2008年8月17日 6:29
    版主

全部回复

  • 你好!
        这个问题是由于多线程引起的,也就是说你这个线程在进行文件流操作的时候,其他线程已经关闭了这个文件流,所以导致了你的这个现成无法访问已经关闭的文件,你可以尝试用加锁来解决这个问题!
        希望以上回答对你有帮助!
    2008年8月17日 2:17
    版主
  • 怎么样加锁呢,能否具体些

    2008年8月17日 2:19
  • 你好!
        使用lock关键字加锁就可以了,我大致给你写一下:
        lock(文件流对象)
        {
            你对文件流的操作;
        }
        有问题在来问我吧!
    2008年8月17日 6:29
    版主