IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

fusion de fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut fusion de fichier
    Bonjour,

    J'aimerai fusionner deux fichiers qui sont à l'origine issue du même fichier, mais qui ont perdu des paquets lors d'un transfert.
    Comme je ne perds pas tout le temps les mêmes paquets, j'aimerai faire un programme qui lit en entrée ces deux fichiers de manière binaire et qui les merge afin de sortir le fichier d'origine.

    Je pense que je peux lire mes fichiers sous forme binaire avec un fread mais après comment je fais pour faire un ou de manière binaire.

    Merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je n'ai pas très bien compris comment vous saurez que le paquet F vient après le paquet E et avant le paquet G.
    La "concaténation" de 2 fichiers est très simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    FILE *in1=fopen(Fic1,"rb");
    FILE *in2=fopen(Fic2,"rb");
    FILE *res=fopen(FicRes,"wb");
    while (!feof(in1))  
    {
       int c;
       if ((c=getc(in1)) != EOF) putc(c, res)
    }
    while (!feof(in2))  
    {
       putc(getc(in2),res); // là on écrit la fin de fichier
    }
    fclose(in1);
    fclose(in2);
    fclose(res);
    Reste à vérifier que les fichiers existent.
    Mais en fait rien ne dit que le résultat sera bon.

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par xduris Voir le message
    J'aimerai fusionner deux fichiers qui sont à l'origine issue du même fichier, mais qui ont perdu des paquets lors d'un transfert.
    Comme je ne perds pas tout le temps les mêmes paquets, j'aimerai faire un programme qui lit en entrée ces deux fichiers de manière binaire et qui les merge afin de sortir le fichier d'origine.
    Il reste à résoudre le gros problème d'identification des paquets et de leur mise en ordre. Comme tu ne donnes rien à ce sujet, c'est pas facile de t'aider.

    Citation Envoyé par Pierre Dolez Voir le message
    La "concaténation" de 2 fichiers est très simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    FILE *in1=fopen(Fic1,"rb");
    FILE *in2=fopen(Fic2,"rb");
    FILE *res=fopen(FicRes,"wb");
    while (!feof(in1))  
    {
       int c;
       if ((c=getc(in1)) != EOF) putc(c, res)
    }
    while (!feof(in2))  
    {
       putc(getc(in2),res); // là on écrit la fin de fichier
    }
    fclose(in1);
    fclose(in2);
    fclose(res);
    A nouveau, l'idiome en C est de tenter la lecture et de vérifier si elle à échoué plutôt que d'utilise feof... La première boucle a le problème de devenir infinie si la lecture échoue -- timeout d'un système de fichier monté par le réseau p.e. --, la seconde en plus écrit le EOF sur le résultat, ce qui donnera un ÿ à la fin du fichier en plus (si interprété avec le code ISO-8859-1).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int c;  // pas char!
    while ( (c = getc(in1)) != EOF )
       putc(c, res);
    while ( (c = getc(in2)) != EOF )
       putc(c, res);
    Pour être blindé, on peut vérifier en prime qu'on est bien à la fin des fichiers plutôt qu'avec getc() retournant EOF à cause d'une erreur. Il faudrait aussi vérifier le résultat des putc (disque plein par exemple).

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oui, j'admets mon erreur.
    Je sais, j'ai de vieilles mauvaises habitudes.
    Je reconnais volontiers que j'ai plus l'habitude de lire des gros fichiers, correctes et que cette très mauvaise habitude d'écrire "while (!feof(in))" est synonyme pour moi de "for (;; )" ou "while (true)" qui est moins parlant pour moi.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Merci pour vos réponses.

    J'ai du mal m''exprimer car le bout de code que tu m'as donné me concatène mes 2 fichiers.
    Or moi je veux les fusionner, c'est à dire que je part du même fichier à l'origine qui a perdu des paquets en cours de téléchargement.

    Lorsque je le télécharge 2 fois par exemple il me manque le début du fichier lors du premier téléchargement et la fin lors du deuxième téléchargement.
    Ainsi je souhaite fussionner ces deux fichier (en faisant un 'ou binaire' bit à bit).

    Merci d'avance.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    La question est de reconstituer le fichier d'origine, donc de replacer correctement les morceaux (en supposant qu'ils sont tous présents dans au moins l'un des deux transferts).

    Si tu reçois une première fois ABCD et la deuxième fois EFGH, comment savoir si le fichier d'origine est ABCDEFGH ou EFGHABCD ou ...ABCD...EFGH... ou ...EFGH...ABCD... ?

    Si tu reçois ABCD et DEFGH , ce n'est pas sûr que le fichier d'origine soit ABCDEFGH, ce pourrait être aussi bien ...ABCD...DEFGH... ou ....DEFGH...ABCD...

    Il faut donc des informations supplémentaires sur le fichier d'origine (et/ou en ajouter pour le transfert) pour arriver à placer les morceaux à leur place (et savoir si il n'en manque pas).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusion des fichiers son
    Par Abstract_cl dans le forum Audio
    Réponses: 9
    Dernier message: 25/08/2007, 14h18
  2. [JDOM] Fusion de fichiers XML
    Par rptmat57 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 18/07/2007, 11h37
  3. Réponses: 2
    Dernier message: 24/01/2007, 17h38
  4. fusion de fichiers XML et access 2003
    Par frdek dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 29/11/2005, 11h23
  5. [XSLT] Fusion de fichier XML ???
    Par webtheque dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/03/2005, 20h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo