2010-09-22 25 views
10

¿Cuál es el mejor método para convertir un flujo en un FileStream usando C#.Convierta un flujo a un FileStream en C#

La función que estoy trabajando tiene un flujo que se le pasa que contiene datos cargados, y yo tienen que ser capaces de realizar stream.Read(), stream.Seek() métodos que son métodos del tipo FileStream.

Un simple elenco no funciona, entonces estoy pidiendo ayuda aquí.

+0

¿Por qué no funciona la fundición? ¿Cuál es el tipo de objeto entrante de Stream entonces? –

+2

Es una operación absurda. Si stream no admite 'Read/Seek' - entonces el lanzamiento no ayudará. – zerkms

Respuesta

18

Read y Seek son métodos en el tipo Stream, no solo FileStream. Es solo que no todos los stream los apoyan. (Personalmente prefiero usar el Position property sobre llamando Seek, pero se reducen a lo mismo.)

Si prefiere tener los datos de la memoria sobre el dumping en un archivo, por qué no acaba de leer todo en una MemoryStream ? Eso apoya la búsqueda. Por ejemplo:

public static MemoryStream CopyToMemory(Stream input) 
{ 
    // It won't matter if we throw an exception during this method; 
    // we don't *really* need to dispose of the MemoryStream, and the 
    // caller should dispose of the input stream 
    MemoryStream ret = new MemoryStream(); 

    byte[] buffer = new byte[8192]; 
    int bytesRead; 
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     ret.Write(buffer, 0, bytesRead); 
    } 
    // Rewind ready for reading (typical scenario) 
    ret.Position = 0; 
    return ret; 
} 

Uso:

using (Stream input = ...) 
{ 
    using (Stream memory = CopyToMemory(input)) 
    { 
     // Seek around in memory to your heart's content 
    } 
} 

Esto es similar al uso del método Stream.CopyTo introducido en .NET 4.

Si realmente desea escribir en el sistema de archivos, podría hacer algo similar que primero se escriba en el archivo y luego rebobine la transmisión ... pero luego tendrá que encargarse de eliminarlo después, para evitar ensuciar su disco con archivos.

Cuestiones relacionadas