2016-06-09 77 views
1

我遇到這個錯誤流讀取文件,並創建動態字節

進程無法訪問,因爲它正在被另一個進程使用。

錯誤顯示在var br = new BinaryReader(new FileStream(fileName, FileMode.Open));

我試圖做到這一點,因爲我想要的字節是動態的。

foreach (string dir in dirs) 
      { 

       string fileName = Path.GetFileName(dir); 


       using (Stream source = System.IO.File.OpenRead(dir)) 
       { 
        byte[] buffer; 
        var br = new BinaryReader(new FileStream(fileName, FileMode.Open)); 
        buffer = br.ReadBytes((int)br.BaseStream.Length); 

       } 
} 
+0

試試這個'File.ReadAllBytes(文件名);' –

+0

你試圖打開同一文件中的兩個流的兩倍。別。你* arleady *有一個流,沒有理由調用'新的FileStream(fileName,FileMode.Open)' –

回答

1

你就不能做到這一點:

using (var source = new FileStream(dir, FileMode.Open)) 
{ 
    byte[] buffer; 
    var br = new BinaryReader(source); 
    buffer = br.ReadBytes((int)br.BaseStream.Length); 
} 

替代,你可以這樣做:

File.ReadAllBytes(dir); 
+0

你是否指這個字節[] fileData = System.IO.File.ReadAllBytes(dir); ?? – Yeep

1

在這裏,你在開第一次文件:

System.IO.File.OpenRead(dir) 

這裏您試圖第二次打開相同的文件:

new FileStream(fileName, FileMode.Open) 

當然,該文件已被佔用。


如下重寫代碼:

using (var source = File.OpenRead(dir)) 
using (var br = new BinaryReader(source)) 
{ 
    byte[] buffer = br.ReadBytes((int)br.BaseStream.Length); 
}