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.
¿Por qué no funciona la fundición? ¿Cuál es el tipo de objeto entrante de Stream entonces? –
Es una operación absurda. Si stream no admite 'Read/Seek' - entonces el lanzamiento no ayudará. – zerkms