我想让两个文件流fs1,fs2访问同一个文件C:\ABC.txt,其中fs1读,fs2写。
            FileStream fs1 = File.Open("C:\\ABC.txt", FileMode.Open, FileAccess.Read, FileShare.Write);
            byte[] fbs1 = new byte[8];
            fs1.Read(fbs1,0,8);            FileStream fs2 = File.Open("C:\\ABC.txt", FileMode.Open, FileAccess.Write);//我在文件流fs1中明明已经指定了 FileShare.Write,可是不知道为什么这里还是会抛出异常
            byte[] fbs2 = new byte[8];
            fs2.Write(fbs2, 0, 8);            int i = 0;
            i++;            fs1.Close();
            fs2.Close();
改成如下后            FileStream fs1 = File.Open("C:\\ABC.txt", FileMode.Open, FileAccess.Read, FileShare.Write);
            byte[] fbs1 = new byte[8];
            fs1.Read(fbs1,0,8);            FileStream fs2 = File.Open("C:\\ABC.txt",FileMode.Open,FileAccess.Write,FileShare.Write);//还是会抛出异常       
            byte[] fbs2 = new byte[8];
            fs2.Write(fbs2, 0, 8);            int i = 0;
            i++;            fs1.Close();
            fs2.Close();
改成如下后            FileStream fs1 = File.Open("C:\\ABC.txt", FileMode.Open, FileAccess.Read, FileShare.Write);
            byte[] fbs1 = new byte[8];
            fs1.Read(fbs1,0,8);            FileStream fs2 = File.Open("C:\\ABC.txt",FileMode.Open,FileAccess.Write,FileShare.Read);//异常消失,顺利通过,实验表明这里用FileShare.ReadWrite也可以           
            byte[] fbs2 = new byte[8];
            fs2.Write(fbs2, 0, 8);            int i = 0;
            i++;            fs1.Close();
            fs2.Close();
我的问题是为什么fs1明明指定了后面可以有文件流写文件,还要在后面的文件流fs2使用FileShare.Read后才能写文件呢?

解决方案 »

  1.   

    http://msdn.microsoft.com/zh-cn/library/system.io.fileshare(VS.80).aspx
    http://www.congci.com/item/file-read-write-op-lock
      

  2.   


    为什么
    ReadFile(FileAccess.Read, FileShare.Read); ReadFile(FileAccess.Read, FileShare.Read); 
    可以而
    WriteFile(FileAccess.Write, FileShare.Write); WriteFile(FileMode.Create, FileAccess.Write, FileShare.Write); 
    就不行了?
      

  3.   

    不好意思写错了,我想请教下,
    为什么
    ReadFile(FileAccess.Read, FileShare.Write);  WriteFile(FileMode.Create, FileAccess.Write, FileShare.Write);  
    不行而
    ReadFile(FileAccess.Read, FileShare.Write);  WriteFile(FileMode.Create, FileAccess.Write, FileShare.Read); 
    却可以文中貌似没提到这点