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.