2016-04-10 3 views
0

Meine Aufgabe ist es, mehrere Binärdateien zusammenzuführen, und dann alles in eine TXT-Datei, ich habe bereits das Format der Dateien, ich habe sie bereits geschrieben, aber ich scheitere sie beim Zusammenführen. Dies ist die Funktion: Output from the binary file into the txt file.2 Binärdateien zusammenführen. Residualdaten zwischen Dateien

int merge_files() 
{ 
    FILE *f1, *ft; 
    char ch, name1[20]; 
    int error, n; 
    char buffer[10000]; 
    printf("\n Give name of file: "); gets_s(name1, 19); 
    while (strlen(name1) != NULL) 
    { 
     fopen_s(&f1, name1, "rb"); 
     fopen_s(&ft, "finaldata.dat", "a"); 
     if (!f1) 
     { 
      error = 1; 
      break; 
     } 
     else 
     { 
      error = 0; 

      rewind(f1); 

      while (n = fread(buffer, sizeof(char), 10000, f1)) 
      { 
       fwrite(buffer, sizeof(char), n, ft); 
       fflush(ft); 
      } 
     } 

     fclose(f1); 
     fclose(ft); 
     printf("Files had been merged"); 
     printf("\n Give name of file: "); gets_s(name1, 19); 
    } 

    return error; 
} 
+0

Mein Schlechter dann sieht es einfach total falsch aus ... Ich werde die MS Versionen genauer überprüfen müssen. –

+1

@ DavidC.Rankin Es funktioniert nicht, ich benutze Visual Studio 2013, FILE * ist nicht kompatibel mit Parameter des Typs FILE ** –

+0

Ich sagte dir falsch - ich entschuldige mich. Ich nahm an, dass 'fopen' und' fopen_s' dieselben Parameter verwendeten. Ich benutze keine MS, also war ich überrascht, als whozcraig darauf hinwies, dass die 'fopen_s' eigentlich einen * Zeiger-zu-Zeiger-zu-FILE * wollten. Revert zu Ihrem ursprünglichen ... –

Antwort

0

Dies ist nicht stimmig:

fopen_s(&f1, name1, "rb"); 
fopen_s(&ft, "finaldata.dat", "a"); 

auf bestimmten Betriebssystemen nicht funktionieren könnte. Der Standardmodus ist der Textmodus. Sie öffnen die Quelldatei im Binärmodus und die Zieldatei im Textmodus. Wenn Ihr Betriebssystem Windows ist, erhalten Sie zusätzliche Zeichen. Tun Sie einfach so:

fopen_s(&f1, name1, "rb"); 
fopen_s(&ft, "finaldata.dat", "ab"); // both files in binary mode 

Edit: überprüfen gibt es keine utf-8 BOM in Ihrer Eingabe-Dateien mit dem folgenden Programm

#include <stdio.h> 

#define BOM_SIZE 3 

int main(int argc, char *argv[]) 
{ 
    int err = 0; 

    for (int i = 1; i < argc; i++) { 
     FILE *f = fopen (argv[i], "r"); 
     if (f != NULL) { 
      unsigned char buf[BOM_SIZE]; 
      if (fread(buf, sizeof(char), BOM_SIZE, f) == BOM_SIZE) 
      { 
       printf("File %s starts with:\n", argv[1]); 

       for (int j = 0; j < BOM_SIZE; j++) 
       { 
        printf("0x%02x%s", (unsigned int) buf[j], (j < BOM_SIZE - 1) ? ", " : "\n"); 
       } 
      } 
      else if (ferror(f)) 
      { 
       perror("fread"); 
       fprintf(stderr, "Error reading file %s\n.", argv[1]); 
       err = 1; 
      } 
      else 
      { 
       printf("File %s is too short to have a UTF-8 BOM.\n", argv[1]); 
      } 
      fclose(f); 
     } 
     else 
     { 
      perror("fopen"); 
      fprintf(stderr, "Could not open %s.\n", argv[i]); 
      err = 1; 
     } 
    } 

    return err; 
} 

Wenn eine Datei mit der Sequenz beginnt "0xEF, 0xBB, 0xBF" dann hast du einen utf-8 bom!

+0

Funktioniert immer noch nicht, es fügt noch zusätzliche Zeichen hinzu. –

+0

@ sNow11 Können Sie einfache Dateien zur Verfügung stellen, mit denen Sie Ihren Fehler bekommen? Ich kann es nicht reproduzieren. – jdarthenay

+0

Es scheint, dass dies ein ziemlich heikles Problem ist, irgendetwas, was ich tun würde, irgendeine Funktion, es fügt Zeichen nach jeder zusammengeführten Datei hinzu. Ich weiß nicht warum. Übrigens habe ich die Funktion komplett geändert und funktioniert immer noch nicht. Ich werde die Antwort hier posten, wenn es mir gelingt, sie zu finden. Danke für die Antworten! –