2017-05-08 99 views
3

我在控制檯程序中編寫了一些代碼並使用文件進行了測試。 現在我想將它移植到實現特定接口的BizTalk管道組件。我並不知道從文件到存儲流的.Write.WriteLine方法如此不同。我以爲我只能交換我的對象。沒有.WriteLine方法,並且.Write方法需要偏移量和字節(附加參數)。C#將FileStream.WriteLine轉換爲MemoryStream

那麼,現在,考慮到我有很多.WriteLine語句,改變我的測試代碼寫入內存流的最佳方法是什麼。我可以先寫入一個StringBuffer,但是我認爲這會打擊流的概念(即一次將整個文檔放在內存中)。

// This is how I used the streams in the Console program 
//FileStream originalStream = File.Open(inFilename, FileMode.Open); 
//StreamWriter streamToReturn = new StreamWriter(outFilename); 

// This is how to get the input stream in the BizTalk Pipeline Componenet 
System.IO.Stream originalStream = pInMsg.BodyPart.GetOriginalDataStream(); 

MemoryStream streamToReturn = new MemoryStream(); 
streamToReturn.WriteLine("<" + schemaStructure.rootElement + ">"); 

還有更多的代碼在這裏沒有顯示。以上只是爲我所做的工作設定舞臺。

回答

6

使用可用於調用WriteLine的StreamWriter

MemoryStream streamToReturn = new MemoryStream(); 
var writer = new StreamWriter(streamToReturn); 
writer.WriteLine("<" + schemaStructure.rootElement + ">"); 
+1

謝謝,從我之前使用StreamWriter開始,這似乎很明顯!我調用了一個流,實際上它是一個StreamWriter。 – NealWalters

+1

我也不得不在StreamWriter上使用.Flush,而不是Stream。否則它會運行,但流BizTalk發出的最後有一些缺失的字符。 – NealWalters

+0

@NealWalters - 更正爲'StreamWriter'需要刷新到它正在寫入的底層'Stream'。 – Igor