[C# 2.0] Le Binaire

iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 1 juin 2006 à 22:17
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 3 juin 2006 à 12:13
Bonjour,

j'aimerais pouvoir lire entierement tout le code binaire d'un fichier exe et le reécrire dans un autre fichier ( le cloner ou le generer ) Seulement j'ai quelques questions :

1) Pourquoi il existe plusieurs methodes pour lire un fichier binaire dans un BinaryReader ?
2) Laquel utiliser ? read ? readboolean ?
3) Comment generer un fichier exe comme j'ai dit precedement ?
4) Comment lire entierement le code binaire ?

j'ai essayé de coder ça :
Stream

filestream =
File.Open(dial.FileName,
FileMode.Open,
FileAccess.Read,
FileShare.Read);

BinaryReader binaire =
new
BinaryReader(filestream);

Stream outp =
File.Create(
"test.bmp");

BinaryWriter wb =
new
BinaryWriter(outp);

 wb.Write(binaire.Read());

 

 

Mais sa marche pas.
Merci pour votre aide

12 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 juin 2006 à 11:50
Salut,

1 ) BinaryReader c'est pour lire des valeurs spécifiques dans une fichier binaire.. par exemple tu sauvegarde la taille de ta forme avec BinaryWriter et tu peux la relire avec BinaryReader.ReadInt32, vu qu'elle est stockée en Int32.

2 ) Aucune dans ton cas.

3 ) Pour une simple copie, pas besoin d'utiliser un BinaryReader. suffit d'un Filestream pour lire dans la source et un Filestream pour écrire dans la destination, tu remarqueras que j'utilise une boucle et un buffer de 4k, on voit trop souvent des codes qui lisent l'integrale du fichier avant de l'écrire.. imagine si tu dois lire un fichier de 4 Go en mémoire avant de le copier.. bonjour la saturation de la mémoire.

public void Copy( string srcPath, string dstPath )
{
    using ( FileStream srcStream = new FileStream( srcPath, FileMode.Open, FileAccess.Read ) )
    {
        using ( FileStream dstStream = new FileStream( dstPath, FileMode.Create, FileAccess.Write ) )
        {
            int cnt = 0;
            byte[ ] buffer = new byte[ 4096 ];


            while ( true )
            {
                cnt = srcStream.Read( buffer, 0, 4096 );


                if ( cnt > 0 )
                    dstStream.Write( buffer, 0, cnt );
                else
                    break;
            }
        }
    }
}


4 ) Comme dans le code précédent.
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
2 juin 2006 à 18:40
Merci.
J'aimerais pouvoir générer une  image :

comment stocker son code binaire dans mon programme ?

Bon but serait de générer un fichier exe ou une img pas de le copié
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 juin 2006 à 19:58
Tu as dit que tu voulais "le réecrire", "le cloner". c'est pour ça que je t'ai donné cet exemple pour le copier.

Je ne vois pas ce que ça veut dire "stocker son code binaire".. à la rigueur tu peux le lire avec un Filestream et le stocker dans un tableau de bytes, si c'est une image tu peux acceder directement aux pixels via LockBits/UnLockBits.

Tu dis "Générer un fichier exe ou une image" la non plus je vois trop.. les formats images jpg, png, gif etc.. ils n'ont pas la même structure binaire, faut connaitre la structure de chacun, le header, le mode compression etc..pour les fichier exe faut se référer au format COFF.
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
2 juin 2006 à 20:16
J'aimerais pouvoir faire un exe qui contienne le code binaire d'un autre exe pour le générer à la demande du visiteur.
Un autre truc : j'ai lu des docs sur les header ( par exemple wav ) et j'aimerais pouvoir le recuperer comment faire pour recuperer un header ?

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 juin 2006 à 21:07
"J'aimerais pouvoir faire un exe qui contienne le code binaire d'un autre exe pour le générer à la demande du visiteur."


Mais quelle est la différence avec une copie ?

"Un autre truc : j'ai lu des docs sur les header ( par exemple wav ) et j'aimerais pouvoir le recuperer comment faire pour recuperer un header ?"

Si tu connais la structure d'un header WAV tu peux créer une structure CSharp identique au header et tu la remplit avec un BinaryReader par exemple. Le header te permet de savoir comment est formaté le reste du fichier.
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
2 juin 2006 à 21:27
La diference avec la copie c'est que le fichier n'existe pas sur le disque de l'utilisateur c'est lui qui demande à le creer et donc il n'est pas copié il est generé

Oui mais comment le recuperer le header, comment créer une structure csharp ... ?
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 juin 2006 à 23:06
Générer un EXE c'est pas simple, les executables Windows sont basés sur le format COFF, j'en sais pas plus..

Un exemple pour lire un header :

public struct Header
{
    public int format;
    public int channel;
    public byte samples;
    public short time;
}


private void ReadHeader( )
{
    using ( FileStream fs = new FileStream( path, FileMode.Open, FileAccess.Read ) )
    {
        using ( BinaryReader br = new BinaryReader( fs ) )
        {
            Header h = new Header( );
            h.format = br.ReadInt32( );
            h.channel = br.ReadInt32( );
            h.samples = br.ReadByte( );
            h.time = br.ReadInt16( );
        }
    }
}
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
3 juin 2006 à 09:49
Merci pour le code.
Sinon si j'ai le code binaire complet du fichier exe à generer c'est dur à faire ?
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
3 juin 2006 à 10:23
C'est sur ce point qu'on se comprend pas bien..  Tout dépend de sous quelle forme tu as le code binaire, un tableau de bytes ? Dans ce cas là il te suffit de créer un fichier sur le disque avec l'extension exe et d'écrire le code dedans avec un Filestream.
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
3 juin 2006 à 10:37
Comment mettre le code binaire sous forme de tableau de byte ?
merci
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
3 juin 2006 à 11:35
On tourne en rond

"Sinon si j'ai le code binaire complet du fichier exe à generer c'est dur à faire ?"

C'est pour ça que je te demande sous quelle forme tu as le code binaire ??

Alors soit tu sais générer des fichiers EXE à partir de rien, c'est à dire créer, un fichier au Format COFF.. Soit tu pars d'un EXE qui existe déja et dans ce cas je te renvoi à mon premier message qui permettait de copier le contenu d'un EXE dans un tableau de byte de 4ko.

Je veux bien t'aider mais j'ai l'impression qu'on ne se comprend pas.
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
3 juin 2006 à 12:13
Merci je pars d'un exe qui existe déjà donc je vais prendre le code que tu m'as filé
0
Rejoignez-nous