2014-09-25 66 views
0

我想從FileInfo得到一個字節[]。無法從FileStream寫

在這裏,FileInfo(fi)是我放入我的silverlight應用程序的文件。

因此,在MSND如發現,我這樣做:

byte[] b = new byte[fi.Length]; 
        UTF8Encoding temp = new UTF8Encoding(true); 
       //Open the stream and read it back. 
       using (FileStream fs = fi.OpenRead()) 
       { 

        while (fs.Read(b, 0, b.Length) > 0) 
        { 

         Console.WriteLine(temp.GetString(b)); 
        } 
       } 

但是,這樣做,它的保護級別,我不能使用此。

所以,我這樣做:

  byte[] b = new byte[fi.Length]; 
      UTF8Encoding temp = new UTF8Encoding(true); 
     //Open the stream and read it back. 
     using (FileStream fs = fi.OpenRead()) 
     { 

      while (fs.Read(b, 0, b.Length) > 0) 
      { 
       fs.Write(b, 0, b.Length); 
      } 
     } 

但我得到了我不能從FileStream編寫信息。

爲什麼我不能寫我的文件我放入我的應用程序到一個字節? 當文件被刪除時,它成爲一個FileInfo。

爲什麼我用OpenRead()?因爲在msdn上,它似乎正在寫入文件:here

OpenWrite()也會出現訪問錯誤。

有沒有另外一種方法可以讓yy FileInfo文件變成一個字節?

+1

因此,您只是爲閱讀打開流,但試圖寫入它......您還期望什麼 - 「無法寫入R/O流」似乎對我來說是合理的行爲...不是確定你想要整體做什麼 - 所以你可能有其他的想法 - 考慮增加你的實際目標的問題。 – 2014-09-25 07:42:36

+0

看:'fs = fi.OpenRead()','fs'打開讀取,而不是寫入 – 2014-09-25 07:42:48

+0

@AlexeiLevenkov我想要的是,將File I drop(轉換成FileInfo)寫入一個字節。 – 2014-09-25 07:45:52

回答

2

要文件讀入一個byte []的easies方法是:

byte[] myByteArray = File.ReadAllBytes(myFileInfo.FullName); 

由於@Dmitry Bychenko媒體鏈接說明你嘗試寫一個FileStream打開爲只讀。 另一件事是你想寫入你讀的同一個FileStream。

要通過糾正你做你能做的嘗試解決問題:

byte[] b = new byte[fi.Length]; 
UTF8Encoding temp = new UTF8Encoding(true); 
//Open the stream and read it back. 
using (FileStream fs = fi.OpenRead()) 
{ 
    using (MemoryStream ms = new MemoryStream(b)) 
    { 
     while (fs.Read(b, 0, b.Length) > 0) 
     { 
      ms.Write(b, 0, b.Length); 
     } 
    } 
} 

在你的情況我會投票給第一個例子是其簡單的閱讀和完全隱藏流的東西。

+1

正如我在問題中所說的,它是一個FileInfo,而不是File,所以我沒有ReadAllBytes()。 – 2014-09-25 07:55:39

+2

@Zaphod如果你讀了我的第一個例子,你會看到我使用FileInfo來獲取文件讀取的路徑。 – wonko79 2014-09-25 08:01:37

+0

是的,但因爲我在銀光,我沒有。我正在嘗試你的第二個解決方案。看來它正在工作。關鍵是使用'memoryStream'。謝謝。 – 2014-09-25 08:08:13