Problème avec les fichiers binaires

A voir également:Problème avec les fichiers binairesOuvrir un fichier binaire - Forum - Téléchargement Lecture d'un fichier binaire ✓ - Forum - Programmation Fichier binaire - Forum - Windows Shell - Affichage d'un fichier binaire: Terminal illisible - Conseils pratiques - Shell Parser un fichier binaire en PHP - Conseils pratiques - PHP

Bonjour à tous,
Comme on peut le deviner du titre, mon problème est que j’ai cette focnction pour copier un fichier binaire dans un autre

void CopyFiles::CopyFile(char fileSource[], char fileDest[])
{
ifstream FichierSource;
ofstream FichierDest;
const int TAILLE = 255;

FichierSource.open(fileSource, ios::in | ios::binary);
if(FichierSource.is_open())
{
char Buffer[TAILLE];
FichierDest.open(fileDest, ios::out |ios::binary);
if(FichierDest.is_open())
{
int32_t a = 0;
while(FichierSource.read((char*)Buffer, TAILLE))
{
FichierDest.write((char*)Buffer, TAILLE);
}
FichierDest.close();
}
FichierSource.close();
}
}


Le programme s’exécute normalement, le fichier source est lu parfaitement, et le fichier destination est enregistré (enfin presque)
les fichier images s’enregistrent très bien,
les vidéos s’enregistrent mais VLC me demande toujours de les réparées avant de les lires
et enfin les fichier texte s’enregistrent mais ils sont vides.
Alors SVP si vous avez une idée je vous serai vraiment très reconnaissant.

Forum

A voir également:Problème avec les fichiers binairesOuvrir un fichier binaire - Forum - Téléchargement Lecture d'un fichier binaire ✓ - Forum - Programmation Fichier binaire - Forum - Windows Shell - Affichage d'un fichier binaire: Terminal illisible - Conseils pratiques - Shell Parser un fichier binaire en PHP - Conseils pratiques - PHP

Web: www.shapebootstrap.net

1 réponse

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

VLC ne doit pas apprécier que la copie soit plus grande que l'original!
Vois-tu pourquoi la taille de la copie est forcément un multiple de

TAILLE
dans le code écrit.

Reply
réponses:
  • auteur

    Bonjour à tous les amis

    merci pour vos réponses rapides

    en fait, j'utilise cette fonction

    void CopyFiles::CopyFile(const char FileSrcRec[], const char FileDestRec[])
    {
    FILE *FileSrc, *FileDest;
    const int TAILLE = 2000;
    long lsizeLu = 0;
    char buffer[TAILLE_BUF];

    if((FileSrc = fopen(FileSrcRec, "rb")) == NULL)
    {
    cout << "impossible d'ouvrir le fichier source";
    exit(1);
    }

    if((FileDest = fopen(FileDestRec, "wb")) == NULL)
    {
    cout << "impossible d'ouvrir le fichier destination";
    exit(1);
    }

    while((lsizeLu = fread(buffer, 1, TAILLE, FileSrc)) != 0)
    {
    fwrite(buffer, 1, lsizeLu, FileDest);
    }
    }


    et ça marche très bien
    si vous avez une autre solution, je suis preneur.
    Merci beaucoup

  • auteur

    Ecrire un code qui mélange du code C et du code C++ est une solution tordue. Je trouve compliqué d'apprendre 2 langages pour un problème simple. D'autant qu'on peut corriger le C++ en utilisant la variable

    lsizelu
    .

    On peut aussi écrire du vrai C++, et ça devient plus simple
    void CopyFile( const char fileSource[] , const char fileDest[] ) { 	std::ifstream  FichierSource( fileSource , std::ios::in | std::ios::binary );  	if ( FichierSource ) { 		std::ofstream  FichierDest( fileDest , std::ios::out | std::ios::binary ); 		if ( FichierDest ) { 			FichierDest << FichierSource.rdbuf(); 		} 	} }

  • auteur

    Merci beaucoup à tous, et merci à toi Dalfab, très éfficace comme fonction, par contre je cherche à contrôler la taille du flux , pour l'associé à une progressBAr par exemple,
    J'ai utilisé cette portion de code, mais je n'ai pas remarquer de différences, quand je changeaint la taille.

    int const TAILLE = 1024;
    char mybuffer [TAILLE];
    FichierDest.rdbuf()->pubsetbuf(mybuffer, TAILLE);


    et voici la focntion complète.
    void CopyFiles::CopyFile(const char FileSrcRec[], const char FileDestRec[])
    {
    std::ifstream FichierSource( FileSrcRec , std::ios::in | std::ios::binary );
    std::ofstream FichierDest( FileDestRec , std::ios::out | std::ios::binary );
    int const TAILLE = 1024;
    char mybuffer [TAILLE];
    FichierDest.rdbuf()->pubsetbuf(mybuffer, TAILLE);
    if ( FichierSource ) {
    if ( FichierDest ) {
    FichierDest << FichierSource.rdbuf();
    }
    }
    }

    merci d'avance pour votre aide.

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed