begin process at 2012 05 30 10:32:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

Utilisation de fstream : Ecrire dans un fichier binaire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Utilisation de fstream : Ecrire dans un fichier binaire

jeudi 16 avril 2009 à 23:11:22 | Utilisation de fstream : Ecrire dans un fichier binaire

christophedlr

Membre Club
Bonjour,

Je voudrais écrire dans un fichier binaire avec fstream.
Actuellement j'y arrive pour les données devant apparaitre en clair, mais la taille par exemple qui ne doit pas apparaitre en clair, ben j'arrive pas à ce que se soit pas en clair quoi.

Si cela peut aider, voici le code de ma classe :
#include <fstream>
#include "tst.h"

TSTFile::TSTFile()
{
    m_stream = new fstream;
}

TSTFile::~TSTFile()
{
    delete m_stream;
}

/*Ouvre l'archive en lecture ou écriture suivant ce qui est demandé*/
bool TSTFile::open(string fileName, bool Write)
{
    if (Write)
    {
        m_stream->open(fileName.c_str(), ios::out | ios::ate | ios::binary);
        m_stream->clear();
        m_stream->write("TST", 3);
    }
   
    else
    {
        m_stream->open(fileName.c_str(), ios::in | ios::ate | ios::binary);
        m_stream->clear();
    }
   
    if ( m_stream->fail() )
    {
        return false;
    }
   
    else
    {
        return true;
    }
}

/*Enregistre dans l'archive le fichier source*/
bool TSTFile::write(string source)
{
    ifstream sourceStream(source.c_str(), ios::in | ios::binary);
    char buffer[1] = {0};
    char name[9] = {0};
    sprintf(name, "%d", source.length());
   
    sourceStream.clear();
    m_stream->write(name, 4);
    m_stream->write( source.c_str(), source.length() );
   
    while (!sourceStream.eof())
    {
        sourceStream.read(buffer, 1);
        m_stream->write(buffer, 1);
    }
   
    sourceStream.close();
    return true;
}

void TSTFile::close()
{
    m_stream->close();
}

ca c'était tst.cpp, voici tst.h :
#ifndef H_TST
#define H_TST

#include <fstream>
#include <iostream>

using namespace std;

class TSTFile
{
    private:
    fstream *m_stream;
   
    public:
    TSTFile();
    ~TSTFile();
    bool open(string fileName, bool Write); //Ouverture de l'archive
    bool write(string source); //Enregistrement d'un fichier dans l'archive
    void close(); //Ferme les flux
};

#endif

et enfin le main.cpp :
#include <iostream>
#include "tst.h"

using namespace std;

int main (int argc, char *argv[])
{
    TSTFile tst;
   
    if (argc == 4)
    {
        if ( (strcmp(argv[1], "-w") == 0)  || (strcmp(argv[1], "--write") == 0) )
        {
            cout << "Enregistrement en cours du fichier " << argv[3] << " dans l'archive " << argv[2] << endl;
           
            if ( tst.open(argv[2], true) )
            {
                if ( tst.write(argv[3]) )
                {
                    tst.close();
                }
               
                else
                {
                    cout << "impossible d'enregistrer le fichier" << endl;
                }
            }
           
            else
            {
                cout << "Impossible d'ouvrir l'archive" << endl;
            }
        }
    }
   
    return EXIT_SUCCESS;
}


Merci d'avance à ceux qui pourront m'aider.
vendredi 17 avril 2009 à 08:14:04 | Re : Utilisation de fstream : Ecrire dans un fichier binaire

fregolo52

Membre Club
Réponse acceptée !

Euh ... Que veux-tu faire ?
Avec :
sprintf(name, "%d", source.length());
m_stream->write(name, 4);
C'est clair que tes 4 premiers octets sont une string, donc la taille en clair.

Tu stockes la taille tu nom du fichier en premier, c'est ca que tu ne veux pas mettre en clair ?
Je connais mal les STL mais
int sourceLen = source.length();
m_stream->write((char *)&sourceLen, 4); ca ne marche pas ?
vendredi 17 avril 2009 à 10:28:37 | Re : Utilisation de fstream : Ecrire dans un fichier binaire

christophedlr

Membre Club
J'ai essayé comme ça mais j'ai une erreur de segmentation c'est ça que je comprend pas.

Oui, je souhaite stocké mais pas en clair, la taille du nom du fichier, je veux faire pareil pour la taille du fichier.

Je souhaite en fait faire un jeu (MMORPG, vous moquez pas, j'ai la motivation et je prépare le terrain longtemp à l'avance), et donc avant de me lancer je souhaite apprendre plusieurs trucs don concevoir un format de fichier d'archive pour le jeu avec donc certaines infos qui ne sont pas en clair comme les tailles ;)
samedi 18 avril 2009 à 11:59:19 | Re : Utilisation de fstream : Ecrire dans un fichier binaire

christophedlr

Membre Club
Bon ben je comprend plus, j'ai retenté de passer du size_t au int et ca fonctionne.
je sais pas ce qui lui avait pris, problème réglé.


Cette discussion est classée dans : stream, write, ios, tst, tstfile


Répondre à ce message

Sujets en rapport avec ce message

les fichiers [ par infodaoudi ] bonjour codeurj'ai la fonction suivantevoid Noeud::insererNF(char *fich,Noeud *ng){        ofstream A(fich,ios::out|ios::app|ios::binary);    if (!A) Webcam Client Serveur Data Packets [ par c0nsur ] Bonjour, J'aimerais savoir comment on peu avoir accès directement à une webcam car j'aimerais  etre capable de diffuser en stream continu la webcam d' Problème avec ios::app [ par kattig ] Bonjour tout le monde,J'ai un petit soucis avec ios::app ou avec la fonction scanf.Voici une partie de mon code:#include... fstream f; f.open("fichier Ouvrir un buffer comme un stream [ par Mr.X ] Je voulais savoir si il existe une fonction permettrais d'ouvrir un char buffer[] comme un FIlE * ?Merci d'avance. FD_WRITE [ par lektrosonic ] Quelqun peut me dire comment on utilise FD_WRITE avec WSAASyncSelect ?l3KTr0 Was HeRe Sockets-Utilisation de WSAAsyncSelect [ par lektrosonic ] Bonjour, je travaille sur les sockets et je developpe deux applications (client-serveur). J'ai etabli la fonction WSAAsyncSelect avec les attributs: F hbitmap d'une jpg [ par deck_bsd ] Yop à tous,Voila je veu obtenir un hbitmap d'un fichier jpg, pour cela j'ai trouver la source de vecchio56 à savoir :http://www.cppfrance.com ios::eof [ par ssmint ] Bonsoir,mon dernier petit souci en date en matière de C++, est la fonction eof(). Voici le code : #include &lt fichier compresser [ par mitali ] Bonjour tt l monde,j'ai une fonction qui me premet de récuperer  le contenu d'un fichier ,ça bien marcher avec les fichiers textes mais le probléme c' Stream RSTP realplayer [ par renaudfrancois_orl ] Bonjour,J'ai écris un bout de code qui vient lire les fluxs RTSP/RTD IP ( a partir de PCAP).Mon problème est que je me retrouve avec un fichier audio


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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 : 0,343 sec (3)

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