+ -
当前位置:首页 → 问答吧 → 问一个关于FileShare控制读写同一个文件的问题

问一个关于FileShare控制读写同一个文件的问题

时间:2011-12-12

来源:互联网

我想让两个文件流fs1,fs2访问同一个文件C:\ABC.txt,其中fs1读,fs2写。

C# code

            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();



改成如下后
C# code

            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();



改成如下后
C# code

            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后才能写文件呢?

作者: BusyDonkey   发布时间: 2011-12-12

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

作者: hefeng_aspnet   发布时间: 2011-12-12

引用 1 楼 hefeng_aspnet 的回复:
http://msdn.microsoft.com/zh-cn/library/system.io.fileshare(VS.80).aspx
http://www.congci.com/item/file-read-write-op-lock


为什么
ReadFile(FileAccess.Read, FileShare.Read); ReadFile(FileAccess.Read, FileShare.Read); 
可以


WriteFile(FileAccess.Write, FileShare.Write); WriteFile(FileMode.Create, FileAccess.Write, FileShare.Write); 
就不行了?

作者: BusyDonkey   发布时间: 2011-12-12

引用 1 楼 hefeng_aspnet 的回复:
http://msdn.microsoft.com/zh-cn/library/system.io.fileshare(VS.80).aspx
http://www.congci.com/item/file-read-write-op-lock

不好意思写错了,我想请教下,
为什么
ReadFile(FileAccess.Read, FileShare.Write); WriteFile(FileMode.Create, FileAccess.Write, FileShare.Write);  
不行


ReadFile(FileAccess.Read, FileShare.Write); WriteFile(FileMode.Create, FileAccess.Write, FileShare.Read); 
却可以

文中貌似没提到这点 

作者: BusyDonkey   发布时间: 2011-12-12