[英]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
你可以投出MemoryStream
到Stream
平凡,和Stream
到MemoryStream
通過類型檢查; 但從來沒有FileStream
到MemoryStream
。 這就像說狗是動物,大象是動物,所以我們可以把狗交給大象。
您可以 MemoryStream
並添加一個Name
屬性(您為其提供值),但FileStream
和YourCustomMemoryStream
之間仍然沒有共性,而FileStream
沒有實現預先存在的接口來獲取Name
; 因此調用者必須單獨顯式處理,或使用duck-typing(可能通過dynamic
或反射)。
另一種選擇(可能更簡單)可能是:將數據寫入臨時文件; 從那里使用FileStream
; 然后(稍后)刪除該文件。
您可以將Stream
與animal, MemoryStream
與dog和FileStream
與cat進行比較。 雖然狗是動物,而貓是動物,但狗肯定不是貓。
如果要將數據從一個流復制到另一個流,則需要創建兩個流,從一個流讀取並寫入另一個流。
此操作無法進行。 FileStream
和MemoryStream
都直接從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.