C# FileStream設置了FileAccess.ReadWrite, FileShare.ReadWrite依然報“流不可讀”或者“流不可寫”


今天遇見一個詭異的事情,我用FileStream操作一個文件的時候,明明設置了FileAccess.ReadWrite, FileShare.ReadWrite了,但是依然報錯,說是“流不可寫”

后來仔細一研究才發現,原來是我用的不對,我是在FileStream里面先用了BinaryReader,然后又用了BinaryWriter,貌似不能這么用,一個FileStream只能用做一次操作

 

static void AAA() {
            using (FileStream fs = new FileStream("E:\\test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) {
                using (BinaryReader br = new BinaryReader(fs)) {
                    Console.WriteLine(br.ReadByte());
                    br.Dispose();
                } 
                using (BinaryWriter bw = new BinaryWriter(fs)) {  //一個FileStream只能進行一次Binary操作,第二次就會報錯

                }
            }
        }

  不知道為什么using包裹着BinaryReader也不行,我還想着重用一個流呢,估計是沒徹底釋放之類的,想要不報錯,就需要給BinaryWriter再申請一次FileStream

static void AAA() {
            using (FileStream fs = new FileStream("E:\\test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) {
                using (BinaryReader br = new BinaryReader(fs)) {
                    Console.WriteLine(br.ReadByte());
                    br.Dispose();
                }

            }
            using (FileStream fs = new FileStream("E:\\test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) {
                using (BinaryWriter bw = new BinaryWriter(fs)) {  //每個Binary操作都申請一次FileStream就不會報錯了

                }
            }
        }

  或者干脆直接用FileStream自己操作算了

static void AAA() {
            using (FileStream fs = new FileStream("E:\\test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) {
                Console.WriteLine(fs.ReadByte());
                fs.Seek(0,SeekOrigin.Begin);
                fs.WriteByte(0xFF);
            } 
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM