2008-10-02 7 views
6

Necesito llamar a un método que acepta un argumento de transmisión. El método carga texto en la secuencia, que normalmente sería un archivo. Me gustaría simplemente llenar una cadena con el contenido de la secuencia, en lugar de escribirla en un archivo. ¿Cómo hago esto?¿Cómo uso una cadena como secuencia en .Net?

Respuesta

7

Utilice un MemoryStream con un StreamReader. Algo así como:

using (MemoryStream ms = new MemoryStream()) 
using (StreamReader sr = new StreamReader(ms)) 
{ 
    // pass the memory stream to method 
    ms.Seek(0, SeekOrigin.Begin); // added from itsmatt 
    string s = sr.ReadToEnd(); 
} 
+0

Podría mencionar que tendrá que rebobinar la secuencia antes de usarla para leer de ella. :) –

5

Uso del StringWriter para actuar como una corriente en una cadena:

StringBuilder sb = new StringBuilder(); 
StringWriter sw = new StringWriter(sb); 
CallYourMethodWhichWritesToYourStream(sw); 
return sb.ToString(); 
+0

Un StringWriter es un tipo de TextWriter, no un tipo de Stream, por lo que no se puede pasar a un método que espera un Stream. –

0

se puede hacer algo como:

string s = "Wahoo!"; 
int n = 452; 

using(Stream stream = new MemoryStream()) { 
    // Write to the stream 

    byte[] bytes1 = UnicodeEncoding.Unicode.GetBytes(s); 
    byte[] bytes2 = BitConverter.GetBytes(n); 
    stream.Write(bytes1, 0, bytes1.Length); 
    stream.Write(bytes2, 0, bytes2.Length); 
+0

O podría simplemente construir el MemoryStream desde la matriz bytes1 []. –

2
MemoryStream ms = new MemoryStream(); 
YourFunc(ms); 
ms.Seek(0, SeekOrigin.Begin); 
StreamReader sr = new StreamReader(ms); 
string mystring = sr.ReadToEnd(); 

es una manera de hacerlo.

+0

Hmm ... no vi la respuesta de Bryant antes, esencialmente la misma cosa. Oh bien. El suyo funcionará si agrega la llamada de búsqueda a él. – itsmatt

+0

Este código realmente funciona. Sería genial fusionar esto con la respuesta mejor formateada de Bryant, pero aún no tengo la reputación de hacerlo ... – JoshL

Cuestiones relacionadas