1

C を使用してファイルから別のファイルにデータを転送する際に問題が発生しました。出力に関する問題のトラブルシューティングを行うためにコミュニティの助けが必要です。次はtxtデータをバイナリデータに変換したいのでこうしています。完全にテスト目的。

これが私がこれまでに持っているコードです:

int txt2txt()
{
    FILE *pTextFile, *pBinaryFile;
    char buffer[1000];
    pTextFile = fopen ("AS001.txt","r");
    pBinaryFile = fopen("BS001.txt","w");
    while(fgets(buffer,1000,pTextFile)!=NULL){
    fwrite(buffer,sizeof(int),sizeof(buffer),pBinaryFile);
}
fclose(pTextFile);
fclose(pBinaryFile);
return 0;
}

入出力例:

AS001.txt:

91829812
1231231
1231232
123231123
1232312
123123123
12312312

BS001.txt を出力します。

91829812
 „w  O]€©O]    * +  O] ¤O]H¨O] ¬O](     O]   @¨O]Lü( ¾8„w8O]š8„w¥ex      O]ˆ©O]  O]8¤O]          ¤O] ¤O]H¨O]`žO]H     O]    8¤O]œü( ¾8„w8O]š8„wuex      O]@¤O]   ЪO]Q      ø    H¨O]PO] ¬O]  O]PO]™Qº€O]PO]  D  Q  Q    ¬O]            Q   ˆ       p¨O] ¬O]Õqˆw¹Qºþÿÿÿ|O]   
4

2 に答える 2

2

このコード:

while(fgets(buffer,1000,pTextFile)!=NULL){
    fwrite(buffer,sizeof(int),sizeof(buffer),pBinaryFile);
}

1000 バイトの読み取りを試行し、1000 * sizeof(int)反復ごとにバイトを書き込みます。システムに 1 バイトの整数が含まれていない限り (ありそうもないことですが)、それはおそらくあなたが望んでいたものではありません。

それに加えて、fgetsバッファ全体がいっぱいになっていない可能性があります-改行で停止します。

使用する:

while (fgets(buffer, 1000, pTextFile) != NULL)
{
    fwrite(buffer, 1, strlen(buffer), pBinaryFile);
}

編集:問題があるため、ここに完全な例を示します。まず、ソースコード:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char buffer[1000];
    FILE *pTextFile = fopen("AS001.txt","r");
    FILE *pBinaryFile = fopen("BS001.txt","w");

    while (fgets(buffer, 1000, pTextFile) != NULL)
    {
        fwrite(buffer, 1, strlen(buffer), pBinaryFile);
    }

    fclose(pTextFile);
    fclose(pBinaryFile);

    return 0;
}

次に、ビルドして実行します。

$ make example
cc     example.c   -o example
$ cat AS001.txt 
91829812
1231231
1231232
123231123
1232312
123123123
12312312

$ ./example 
$ diff AS001.txt BS001.txt 
$ 
于 2013-06-07T20:12:10.583 に答える