Read
et Seek
sont des méthodes sur le type Stream
, pas seulement FileStream
. C'est juste que tous les flux ne les supportent pas. (Personnellement, je préfère utiliser le Position
property sur appeler Seek
, mais ils se résument à la même chose.)
Si vous préférez avoir les données en mémoire sur le dumping dans un fichier, pourquoi ne pas lire juste tout en MemoryStream
? Cela soutient la recherche. Par exemple:
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;
}
Utilisation:
using (Stream input = ...)
{
using (Stream memory = CopyToMemory(input))
{
// Seek around in memory to your heart's content
}
}
Ceci est similaire à l'aide de la méthode Stream.CopyTo
introduite dans .NET 4.
Si vous voulez effectivement d'écrire sur le système de fichiers, vous pouvez faire quelque chose de similaire qui écrit d'abord dans le fichier puis rembobine le flux ... mais alors vous devrez prendre soin de le supprimer par la suite, pour éviter de jeter des déchets sur votre disque avec des fichiers.
Pourquoi le moulage ne fonctionne-t-il pas? Quel est le type de votre objet Stream entrant? –
C'est une opération absurde. Si le flux ne prend pas en charge 'Read/Seek', la conversion ne vous aidera pas. – zerkms