begin process at 2012 02 23 06:56:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > [.NET2] FAIRE UNE IMAGE ISO D'UN CD/DVD

[.NET2] FAIRE UNE IMAGE ISO D'UN CD/DVD


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Source .NET ( DotNet ) Classé sous :iso9660, iso, image, cd Niveau :Initié Date de création :06/06/2006 Date de mise à jour :06/06/2006 11:47:18 Vu / téléchargé :29 817 / 693

Auteur : Willi

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
C'est juste une traduction de la traduction en C de Vecchio56 d'une source écrit par BruNews en assembleur

Vous trouvez l'original ici:
http://www.asmfr.com/codes/FAIRE-FICHIER-ISO- MASM32_22635.aspx
Sa traduction en C:
http://www.cppfrance.com/codes/FAIRE-FICHIER-IS O-WIN32_37943.aspx

Informations:
Windows 2000 ou supérieur requis.

Fait un fichier Iso9660 depuis un CD ou DVD.
On peut stopper pendant l'opération.
Les CDs musique non pris en charge.

La source est commentée, assez simple à comprendre :)

Source

  • using System;
  • using System.IO;
  • using System.Threading;
  • using System.Runtime.InteropServices;
  • using Microsoft.Win32.SafeHandles;
  • namespace Iso9660
  • {
  • public class Iso9660
  • {
  • #region 'Variables'
  • Thread _thIso;
  • string _output;
  • long _cdsize;
  • FileStream _fsr;
  • FileStream _fsw;
  • SafeFileHandle _hdev;
  • #endregion
  • #region 'Constantes'
  • const int BUFFER_SIZE = 0x20000; //128ko taille des blocs de copie
  • const long FAT32_LIMIT = 4294967296; //4go taille max. d'un fichier sur FAT32
  • #endregion
  • #region 'Evénement'
  • /// <summary>Indique la progression.</summary>
  • public event Iso9660EventHandler OnProgress;
  • /// <summary>Se déclenche lors d'un message pendant la création.</summary>
  • public event Iso9660EventHandler OnMessage;
  • /// <summary>Se déclenche quand l'image est créée.</summary>
  • public event Iso9660EventHandler OnFinish;
  • #endregion
  • #region 'Propriété'
  • /// <summary>
  • /// Retourne la taille en octets du CD.
  • /// </summary>
  • public long SizeOfCD
  • {
  • get { return _cdsize; }
  • }
  • #endregion
  • #region 'Constructeur'
  • /// <summary>
  • /// Constructeur.
  • /// </summary>
  • public Iso9660()
  • {
  • _thIso = null;
  • _output = @"C:\MyCd.iso";
  • }
  • #endregion
  • #region 'Méthodes'
  • /// <summary>
  • /// Créer une image ISO9660 d'un cd/dvd.
  • /// </summary>
  • /// <param name="source">Lecteur cd/dvd.</param>
  • /// <param name="output">Fichier iso de sortie.</param>
  • /// <returns>1 = Création de l'image en cours.
  • /// -1 = Handle du lecteur invalide.
  • /// -2 = La source n'est pas un cd/dvd.
  • /// -3 = Espace disque insuffisant pour la création de l'image.
  • /// -4 = Volume de destination FAT32 et taille de la source > 4 096 Mo.</returns>
  • public int MakeIsoFromCD(string source, string output)
  • {
  • //Source CD/DVD
  • if (new DriveInfo(source).DriveType != DriveType.CDRom) return -2;
  • //récupérer taille du cd
  • _cdsize = CDLenght(source);
  • //vérif espace disque
  • long hddsize = new DriveInfo(Path.GetPathRoot(output)).AvailableFreeSpace;
  • if (hddsize <= _cdsize) return -3;
  • //Test capacité > 4 096 Mo (partition NTFS)
  • if (!IsNTFS(output) & _cdsize >= FAT32_LIMIT) return -4;
  • //Ouverture
  • _hdev = NativeMethods.CreateFileR(source);
  • if (output != "") _output = output;
  • //Si handle invalide ou fermé
  • if (_hdev.IsClosed | _hdev.IsInvalid) return -1;
  • //Création thread pour copie + Démarrage
  • _thIso = new Thread(new ThreadStart(ThProcIso));
  • _thIso.Start();
  • return 1;
  • }
  • /// <summary>
  • /// Arrete la création de l'image.
  • /// (+ Supprime l'image créer)
  • /// </summary>
  • public void Stop()
  • {
  • _thIso.Abort();
  • CloseAll();
  • if (File.Exists(_output)) File.Delete(_output);
  • if (OnMessage != null)
  • {
  • EventIso9660 e = new EventIso9660(@"Création de l'image annulée");
  • OnMessage(e);
  • }
  • }
  • /// <summary>
  • /// Méthode - C'est ici que l'ont crée l'image iso9660.
  • /// </summary>
  • private void ThProcIso()
  • {
  • System.Diagnostics.Stopwatch chrono = new System.Diagnostics.Stopwatch();
  • chrono.Start();
  • try
  • {
  • _fsr = new FileStream(_hdev, FileAccess.Read, BUFFER_SIZE);
  • _fsw = new FileStream(_output, FileMode.Create, FileAccess.Write, FileShare.None, BUFFER_SIZE);
  • byte[] buffer = new byte[BUFFER_SIZE];
  • //Lecture des blocs de données du volume -> écriture des blocs dans le fichier iso
  • do
  • {
  • _fsr.Read(buffer, 0, BUFFER_SIZE);
  • _fsw.Write(buffer, 0, BUFFER_SIZE);
  • if (OnProgress != null)
  • {
  • EventIso9660 e = new EventIso9660(_fsw.Position);
  • OnProgress(e);
  • }
  • } while (_fsw.Position == _fsr.Position);
  • }
  • catch (Exception ex)
  • {
  • //En cas d'erreur.
  • if (OnMessage != null)
  • {
  • EventIso9660 e = new EventIso9660("Erreur pendant la création de l'image: " + ex.Message);
  • OnMessage(e);
  • }
  • }
  • finally
  • {
  • CloseAll();
  • if (OnFinish != null)
  • {
  • EventIso9660 e = new EventIso9660(chrono.Elapsed);
  • OnFinish(e);
  • }
  • }
  • }
  • /// <summary>
  • /// Ferme les flux + handles et libère les ressources utilisées.
  • /// </summary>
  • private void CloseAll()
  • {
  • //Ferme les flux sur les 2 fichiers et libère les ressources utilisées.
  • _fsr.Close();
  • _fsw.Close();
  • //Marque le handle et libère les ressources utilisées.
  • _hdev.Close();
  • _hdev.Dispose();
  • }
  • /// <summary>
  • /// Taille du cd/dvd.
  • /// </summary>
  • /// <param name="drive">Lecteur source.</param>
  • /// <returns>Taille en octets.</returns>
  • private long CDLenght(string drive)
  • {
  • return new DriveInfo(drive).TotalSize;
  • }
  • /// <summary>
  • /// Indique si système de fichiers du volume est NTFS.
  • /// </summary>
  • /// <param name="destination">Image ISO de sortie.</param>
  • /// <returns>True si NTFS.</returns>
  • private bool IsNTFS(string destination)
  • {
  • return new DriveInfo(Path.GetPathRoot(destination)).DriveFormat == "NTFS" ? true : false;
  • }
  • #endregion
  • }
  • }
using System;
using System.IO;
using System.Threading;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

namespace Iso9660
{
    public class Iso9660
    {

        #region 'Variables'

        Thread _thIso;
        string _output;
        long _cdsize;
        FileStream _fsr;
        FileStream _fsw;
        SafeFileHandle _hdev;

        #endregion


        #region 'Constantes'

        const int BUFFER_SIZE = 0x20000;            //128ko taille des blocs de copie
        const long FAT32_LIMIT = 4294967296;        //4go taille max. d'un fichier sur FAT32

        #endregion


        #region 'Evénement'

        /// <summary>Indique la progression.</summary>
        public event Iso9660EventHandler OnProgress;
        /// <summary>Se déclenche lors d'un message pendant la création.</summary>
        public event Iso9660EventHandler OnMessage;
        /// <summary>Se déclenche quand l'image est créée.</summary>
        public event Iso9660EventHandler OnFinish;

        #endregion
        

        #region 'Propriété'

        /// <summary>
        /// Retourne la taille en octets du CD.
        /// </summary>
        public long SizeOfCD
        {
            get { return _cdsize; }
        }
	
        #endregion


        #region 'Constructeur'

        /// <summary>
        /// Constructeur.
        /// </summary>
        public Iso9660()
        {
            _thIso = null;
            _output = @"C:\MyCd.iso";
        }

        #endregion


        #region 'Méthodes'

        /// <summary>
        /// Créer une image ISO9660 d'un cd/dvd.
        /// </summary>
        /// <param name="source">Lecteur cd/dvd.</param>
        /// <param name="output">Fichier iso de sortie.</param>
        /// <returns>1 = Création de l'image en cours.
        /// -1 = Handle du lecteur invalide.
        /// -2 = La source n'est pas un cd/dvd.
        /// -3 = Espace disque insuffisant pour la création de l'image.
        /// -4 = Volume de destination FAT32 et taille de la source > 4 096 Mo.</returns>
        public int MakeIsoFromCD(string source, string output)
        {
            //Source CD/DVD
            if (new DriveInfo(source).DriveType != DriveType.CDRom) return -2;

            //récupérer taille du cd
            _cdsize = CDLenght(source);

            //vérif espace disque
            long hddsize = new DriveInfo(Path.GetPathRoot(output)).AvailableFreeSpace;
            if (hddsize <= _cdsize) return -3;

            //Test capacité > 4 096 Mo (partition NTFS)
            if (!IsNTFS(output) & _cdsize >= FAT32_LIMIT) return -4;

            //Ouverture
            _hdev = NativeMethods.CreateFileR(source);
            if (output != "") _output = output;

            //Si handle invalide ou fermé
            if (_hdev.IsClosed | _hdev.IsInvalid) return -1;

            //Création thread pour copie + Démarrage
            _thIso = new Thread(new ThreadStart(ThProcIso));
            _thIso.Start();

            return 1;
        }

        /// <summary>
        /// Arrete la création de l'image.
        /// (+ Supprime l'image créer)
        /// </summary>
        public void Stop()
        {
            _thIso.Abort();

            CloseAll();

            if (File.Exists(_output)) File.Delete(_output);

            if (OnMessage != null)
            {
                EventIso9660 e = new EventIso9660(@"Création de l'image annulée");
                OnMessage(e);
            }
        }

        /// <summary>
        /// Méthode - C'est ici que l'ont crée l'image iso9660.
        /// </summary>
        private void ThProcIso()
        {
            System.Diagnostics.Stopwatch chrono = new System.Diagnostics.Stopwatch();
            chrono.Start();

            try
            {
                _fsr = new FileStream(_hdev, FileAccess.Read, BUFFER_SIZE);
                _fsw = new FileStream(_output, FileMode.Create, FileAccess.Write, FileShare.None, BUFFER_SIZE);

                byte[] buffer = new byte[BUFFER_SIZE];

                //Lecture des blocs de données du volume -> écriture des blocs dans le fichier iso
                do
                {
                    _fsr.Read(buffer, 0, BUFFER_SIZE);
                    _fsw.Write(buffer, 0, BUFFER_SIZE);

                    if (OnProgress != null)
                    {
                        EventIso9660 e = new EventIso9660(_fsw.Position);
                        OnProgress(e);
                    }

                } while (_fsw.Position == _fsr.Position);
            }
            catch (Exception ex)
            {
                //En cas d'erreur.
                if (OnMessage != null)
                {
                    EventIso9660 e = new EventIso9660("Erreur pendant la création de l'image: " + ex.Message);
                    OnMessage(e);
                }
            }
            finally
            {
                CloseAll();

                if (OnFinish != null)
                {
                    EventIso9660 e = new EventIso9660(chrono.Elapsed);
                    OnFinish(e);
                }
            }
        }

        /// <summary>
        /// Ferme les flux + handles et libère les ressources utilisées.
        /// </summary>
        private void CloseAll()
        {
            //Ferme les flux sur les 2 fichiers et libère les ressources utilisées.
            _fsr.Close();
            _fsw.Close();

            //Marque le handle et libère les ressources utilisées.
            _hdev.Close();
            _hdev.Dispose();
        }

        /// <summary>
        /// Taille du cd/dvd.
        /// </summary>
        /// <param name="drive">Lecteur source.</param>
        /// <returns>Taille en octets.</returns>
        private long CDLenght(string drive)
        {
            return new DriveInfo(drive).TotalSize;
        }

        /// <summary>
        /// Indique si système de fichiers du volume est NTFS.
        /// </summary>
        /// <param name="destination">Image ISO de sortie.</param>
        /// <returns>True si NTFS.</returns>
        private bool IsNTFS(string destination)
        {
            return new DriveInfo(Path.GetPathRoot(destination)).DriveFormat == "NTFS" ? true : false;
        }

        #endregion

    }
}

 Conclusion

Voila,
A vos notes et commentaires :)

++

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

06 juin 2006 11:47:18 :
arf ! oublie de la capture !

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) BOITE DE DIALOGUE D'OBJET - DIRECTORY OBJECT PICKER
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPLORER LA MFT D'UNE PARTITION NTFS
Source avec Zip Source avec une capture Source .NET (Dotnet) IPHELPER - PORTS TCP/UDP, TABLES DE ROUTAGE/ARP + FONCTIONS ...
Source avec Zip Source avec une capture Source .NET (Dotnet) PREVIEW HANDLER POUR OFFICE OUTLOOK 2007/10 SUR LES FICHIERS...
Source avec Zip Source avec une capture Source .NET (Dotnet) TEAM FOUNDATION SERVER - EXPLOITER LA PARTIE CLIENTE.

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) EXPLORATEUR DE DOSSIERS ET FICHIERS par Yanith
Source avec Zip Source avec une capture Source .NET (Dotnet) ZIP-UNZIP AVEC SHARPZIPLIB par buno
Source avec Zip Source .NET (Dotnet) SUPER COPIER par casseur
Source .NET (Dotnet) SERIALIZATION/DESERIALIZATION COMPLÈTE DE CLASSES par DedeSurf
Source avec Zip CONVERSION DE FICHIERS FORTRAN 77 EN FORTRAN 95 par deadhand

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) BALLON, CAREE ET IMAGE QUI TOURNENT, SE GONFLENT ET SE DGONF... par zertyx
Source avec Zip Source .NET (Dotnet) PUZZLE 4X4 par jrscofield
Source avec Zip SILVERLIGHT 4: BOUTON À 3 IMAGES par BumpMANN
Source .NET (Dotnet) AJOUT D'UNE IMAGE DANS UN RICHTEXTBOX SANS PRESS-PAPIER par yohan49
Source avec Zip Source avec une capture Source .NET (Dotnet) [.NET2] FICHIER IMAGE ISO 9660 - LECTURE + EXTRACTION DU CON... par Willi

Commentaires et avis

Commentaire de Charles Racaud le 06/06/2006 16:57:36

Ben c'est bien tout ca.
Dommage que l'on puisse pas séléctionner les fichiers à encoder.
Faut t-il la traduire en vb ? java ? ... Une source qui va loin.

Commentaire de Willi le 06/06/2006 17:05:03 administrateur CS

Lol Kenji, effectivement si il y a des courageux pour traduire elle peut faire le tour de la communautée CS :)

Je suis en train de bosser sur la création d'un UltraISO like, sa viendra par la suite peut etre dans un autre language :)

Commentaire de Nurgle le 12/06/2006 19:40:05 administrateur CS

Eh bien, en parlant de traduction, en voici maintenant la traduction en VB.NET 2 (alias VB 2005, alias VB 8.0, c'est comme on veut :p) :

http://www.vbfrance.com/codes/NET2-CREER-IMAGE-ISO-PARTIR-DISQUE_38076.aspx

Il manquerait encore Delphi, Java et VB6 et on aura à peu près fait le tour :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

traitement d'images avec C# [ par ingensi ] j'ai besoin de votre aide svp [^^sad1] j'ai un projet à faire et à rendre au début de la prochaine année universitaire. ce projet consiste principalem Déformation en trapèze d'une image [ par SnakeHunter221298 ] Bonjour, Je dois créer un programme qui me permet d'intégrer une image dans une autre. pour rendre le rendu plus réaliste j'aurai besoin d'un code qui Inser une image dans une cellule c1TrueDBGrid [ par twaita ] Comment inserer une image dans une cellule c1truDBGrid et effectuer un evennement à elle? SP très urgent et merci d'avance :) Probleme pour Libérer les ressources d'une image en fond de canvaslors de la sauvegarde [ par jerome_ ] Bonjour, Je développe une appli en C# WPF sous win 7. J'ai mis une image à l'intérieur d'un canvas afin d'y dessiner dessus et enregistrer l'image Application console - Detail Image windows 7 [ par Djzlouk ] Bonjour, J'ai une appli console ou j'aimerais récupérer toutes les infos d'une image, es possible ? Les tags, la notation, l'appareil qui a prit la pointeur rawdata bitmap [ par gearmat ] Bonjour Bonjour j'aurais besoin de votre aide pour la classe bitmap :) j'ai une dll coder en c++ de traitement d'image qui me demande en paramètre u coordonée clique souris [ par chasseurdedemon ] bonjour, J'ai besoin pour mon programme de connétre les coordoné de la souris lor d'un clique . exemple : j'ai une image lors d'un clique sur l'imag Bandeau d'image(cliquable) dans un formulaire Winform [ par partales ] bonjour, Je cherche à faire une sorte de bandeau d'image cliquable dans un formulaire. Seulement, j'aurais souhaité pouvoir le courber (le bandeau) d Découper une image en WPF [ par xmox667 ] Salut à tous, Qui saurait comment on découpe une image comme un puzzle en wpf ? Merci


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,120 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales