簡體   English   中英

C#將MemoryStream轉換為FileStream

[英]C# Casting MemoryStream to FileStream

我的代碼是這樣的:

byte[] byteArray = Encoding.ASCII.GetBytes(someText);
MemoryStream stream = new MemoryStream(byteArray);
StreamReader reader = new StreamReader(stream);
FileStream file = (FileStream)reader.BaseStream;

后來我正在使用file.Name。

我收到一個InvalidCastException:它顯示如下

無法將類型為“System.IO.MemoryStream”的對象強制轉換為“System.IO.FileStream”。

我在某處讀到了我應該將FileStream更改為Stream。 還有什么我應該做的嗎?

MemoryStream與文件無關,並且沒有文件名的概念。 基本上,你不能這樣做。

你當然不能在他們之間施放; 你只能向上向上 - 而不是向側面; 可視化:

        Stream
          |
   ---------------
   |             |
FileStream    MemoryStream

你可以投出MemoryStreamStream平凡,和StreamMemoryStream通過類型檢查; 但從來沒有FileStreamMemoryStream 這就像說狗是動物,大象是動物,所以我們可以把狗交給大象。

可以 MemoryStream並添加一個Name屬性(您為其提供值),但FileStreamYourCustomMemoryStream之間仍然沒有共性,而FileStream沒有實現預先存在的接口來獲取Name ; 因此調用者必須單獨顯式處理,或使用duck-typing(可能通過dynamic或反射)。

另一種選擇(可能更簡單)可能是:將數據寫入臨時文件; 從那里使用FileStream ; 然后(稍后)刪除該文件。

您可以將Stream與animal, MemoryStream與dog和FileStream與cat進行比較。 雖然狗是動物,而貓是動物,但狗肯定不是貓。

如果要將數據從一個流復制到另一個流,則需要創建兩個流,從一個流讀取並寫入另一個流。

此操作無法進行。 FileStreamMemoryStream都直接從Stream派生,因此它們是兄弟類型。 通常,在以下場景中:

 public class A { }
 public class B : A { }
 public class C : A { }

無法將B轉換為C,反之亦然。 B和C之間沒有“is-a”關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM