今天遇見一個詭異的事情,我用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); } }