Sauvegarder un stream

Résolu
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 1 déc. 2007 à 15:51
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 2 déc. 2007 à 16:57
Salut, je suis surpris de ne pas trouver dans le framework une fonction pour enregistrer un stream dans un fichier.. Avant de poster le code suivant sur Codyx, je voulais savoir si vous voyez une autre méthode ?

private static void StreamToFile( Stream inputStream, string outputFile, FileMode fileMode )
{
    if ( inputStream == null )
        throw new ArgumentNullException( "inputStream" );


    if ( String.IsNullOrEmpty( outputFile ) )
        throw new ArgumentException( "Argument null or empty.", "outputFile" );


    using ( FileStream outputStream = new FileStream( outputFile, fileMode, FileAccess.Write ) )
    {
        int cnt = 0;
        const int LEN = 4096;
        byte[ ] buffer = new byte[ LEN ];


        while( ( cnt = inputStream.Read( buffer, 0, LEN ) ) != 0 )
            outputStream.Write( buffer, 0, cnt );
    }
}
A voir également:

3 réponses

cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
2 déc. 2007 à 15:24
Salut,
L'ennui avec un Stream, c'est qu'il peut très bien ne jamais finir (par exemple un flux d'une radio web). Dans ce cas, le copier dans un fichier peut poser des problèmes.

Si ton flux est un fichier, autant copier directement le fichier (System.IO.File.Copy).

Dans tous les autres cas, le code que tu proposes est une solution.
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
2 déc. 2007 à 15:33
Salut,

Heu, pas mieux :-)
En tout cas l'absence de méthode dédiée à ce genre de tâche dans le formework ne me choque pas plus que ça, ça ne serait pas forcément très utilisé.
Après tout dans beaucoup de cas, notamment sur tout ce qui est *Writer, on spécifie/peut spécifier soit même le Stream sous-jacent, et du coup directement fournir le FileStream adéquat.
Sinon dans le cas particulier de MemoryStream, on a la méthode WriteTo, mais il est vrai que ce n'est pas dédié à l'écriture du fichier.

/*
coq
MVP Visual C#
CoqBlog
*/
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 déc. 2007 à 16:57
Merci pour vos réponses.. en fait la question s'est posée quand j'ai du sauvegarder le stream ( ConnectStream ) renvoyé par la methode HttpWebResponse.GetResponseStream( ) .
0
Rejoignez-nous