2015-10-05 37 views
-2

是否可以從字節數組創建文件並將其作爲文件直接發送到流而不在磁盤上創建該文件?如何從字節數組創建文件並將其作爲文件發送到流而不在磁盤上創建此文件?

+3

可以輕鬆地發送一個字節數組的存儲器流。 – kevintjuh93

+1

當你說「發送到流,你是什麼意思?它是在一個asp.net應用程序的上下文中,你想用戶下載它? –

+0

請寫你的完整用例。流,然後whats next? – Yogi

回答

2

有一個MemoryStream類將byteArray作爲參數。你不需要寫一個文件。

Stream stream = new MemoryStream(byteArray); 

或者,您可以Write到現有MemoryStream

memStream.Write(byteArray, 0 , byteArray.Length); 
+0

謝謝你的幫助 – LeonidB

+0

@LoenidB如果這個答案對你有幫助,請考慮接受它 – Sven

2

你的問題不是很清楚。您正在詢問「創建文件」,但您卻說「沒有在磁盤上創建此文件」。但是有可能是由「一個字節數組創建一個文件」:

File.WriteAllBytes(path, bytes); 

其中path是文件創建和字節是字節[]寫 - 這僅僅是那些衆多方式之一。

或者「發送到流而不在磁盤上創建文件」。即:寫入MemoryStream:

var ms = new MemoryStream(bytes); 

恐怕你的問題需要更具體的你想要做什麼。

編輯:加密樣品:

private static byte[] Crypt 
    (byte[] data, byte[] key, byte[] iv, ICryptoTransform cryptor) 
{ 
    MemoryStream m = new MemoryStream(); 
    using(Stream c = new CryptoStream(m, cryptor, CryptoStreamMode.Write)) 
    { 
    c.Write(data, 0, data.Length); 
    } 
    return m.ToArray(); 
} 

public static byte[] Encrpyt(byte[] data, byte[] key, byte[] iv) 
{ 
    using(Aes algorithm = Aes.Create()) 
    using(ICryptoTransform encryptor = algorithm.CreateEncryptor(key,iv)) 
    { 
    return Crypt(data, key, iv, encryptor); 
    } 
} 
+0

謝謝你的回覆我有一個文件我將這個文件發送給加密類秒。這個加密類返回byte []。我可以在這個數組的磁盤c:\ temp \ test.file上創建這個加密文件,然後將它流式傳輸到我想要的文件中。但我不想在磁盤上創建這個test.file,因爲如果我想加密1MB - 我需要磁盤上的2MB空間(我知道,我可以在流式傳輸之後從temp中刪除此文件),但如果我想要加密10GB文件 - 我需要臨時20GB的磁盤空間。這就是爲什麼我不想將它創建爲磁盤上的文件。謝謝。 – LeonidB

+0

我仍然不明白你的意思,但無論如何增加了一個加密樣本。 –

+0

非常感謝你的例子!你不明白什麼? – LeonidB

相關問題