2016-04-10 14 views
0

私の割り当ては、複数のバイナリファイルをマージし、それをすべてtxtファイルに入れることです。私はすでにファイルのフォーマットを持っています。私は既にそれらを書きましたが、それらをマージするのに失敗します。 Output from the binary file into the txt file.2つのバイナリファイルをマージします。ファイル間の残りのデータ

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

私の悪いところは、まったく間違っているようです...私は、MSのバージョンをより詳細にチェックする必要があります。 –

+1

@ DavidC.Rankin動作しません。Visual Studio 2013を使用します。FILE *は、FILEタイプのパラメータと互換性がありません。** –

+0

私は間違って言った - 謝罪します。私は 'fopen'と仮定し、' fopen_s'は同じパラメータを取った。私はMSを使用していないので、whozcraigが 'fopen_s'を指摘して実際にFILE *へのポインタを必要としていたことに驚いていました。あなたのオリジナルに戻してください... –

答えて

0

これはコヒーレントではありません:

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

それが動作しない可能性があり、オペレーティングシステムに応じて、これは、関数です。デフォルトモードはテキストモードであるため、バイナリモードでソースファイルを開き、テキストモードでターゲットファイルを開きます。 OSがWindowsの場合、補足文字が表示されます。

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

編集:任意のファイルは、シーケンスで始まっている場合は何もUTF-8 BOMあなたのエントリファイルで次のプログラム

#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; 
} 

ではありません確認してください "0xEFという、0xbb、0xbfの" ただ、この方法を行いますあなたはutf-8 bomを持っています!

+0

まだ動作していませんが、補助文字が追加されています。 –

+0

@ sNow11あなたはあなたのバグを取得する簡単なファイルを提供できますか?私はそれを再現することはできません。 – jdarthenay

+0

これはかなり繊細な問題だと思います。私がやることは何でも、どの機能でも、各マージされたファイルの後に文字が追加されます。 Idkなぜ。ところで、私は完全に機能を変更してもまだ動作しません。もし私がそれを見つけることができれば、私はここに答えを掲示します。答えに感謝します! –

関連する問題