27 janvier 2009

Astuce du jour : Copier un fichier avec la classe Stream

Voici une petite méthode qui permet de copier un fichier dans un nouveau à l'aide de la classe Stream :

public static void CopierFichier(string pNomFichier1, string pNomFichier2)
{
    // Initialisation des flux
    Stream streamFichier1 = new StreamReader(pNomFichier1).BaseStream ;
    Stream streamFichier2 = new FileStream(pNomFichier2, FileMode.Create, FileAccess.Write);

    // Initialisation du buffer à 32 Ko
    int taille = 1024 * 32;
    Byte[] buffer = new Byte[taille];
    int bytesRead = 0;

    // Copie du flux 1 vers le flux 2
    do
    {
        bytesRead = streamFichier1.Read(buffer, 0, taille);
        streamFichier2.Write(buffer, 0, bytesRead);
    }

    while (bytesRead > 0);
 
    // Fermeture des flux
    streamFichier1.Close();
    streamFichier2.Close();
} 

L'argument pNomFichier1 correspond au nom du fichier à copier et le 2ème correspond au nom du fichier créé par la fonction.

4 commentaires:

Joss a dit…

Pourquoi se compliquer la vie pour copier un fichier vers un autre?
File.Copy n'aurait-il pas fait l'affaire?

Si le but était de lire depuis un Stream quelconque (memoire, network...) pour l'ecrire dans une fichier j'aurais compris mais la je ne vois pas l'interet de tout pour simplement 2 fichiers.

Pourrais-tu m'expliquer?

Popul a dit…

Voici mon explication :

Je dirai que mon exemple est très scolaire et que pour une simple copie de fichier, la fonction File.Copy est parfaite.

Cependant, le code ci-dessus a l'avantage de s'exécuter facilement dans une application Console et montre bien l'utilisation de la classe Stream.

femmes russes nancy a dit…

Mmmmm ! J'ai rien compris mais je vais essayer de tout relire...

Création site internet a dit…

merci très interessant comme information.