【发布时间】:2016-01-20 00:40:24
【问题描述】:
我在从二进制文件复制和写入文本文件时遇到问题。我编写了一个能够从文本文件复制并写入二进制文件的程序,但我不能做相反的事情。
这是我遇到问题的函数:
void CopyBin2Text(char* rafname, char* txtname)
{
FILE * fraf = fopen(rafname,"rb");
FILE * ftxt = fopen(txtname,"r+");
//READ FROM BINARY FILE
struct PERSON p;
int ByteOfBin;
printf("ID \t NAME \t\t BALANCE \n");
printf("---------------------------------------\n");
当我运行我的程序时,它会在打印上述语句后停在这里
while(!feof(fraf))
{
fscanf(fraf, "%d %s %f", &p.ID, p.name, &p.balance);
ByteOfBin = ((p.ID/10-1)*sizeof(p));
fseek(ftxt,ByteOfBin, SEEK_SET);
fwrite((char *)&p, sizeof(p), 1, ftxt);
}
fclose(fraf);
fclose(ftxt);
}
我注意到的另一个问题是文本文件变得太大而无法打开。结果是我必须删除文本文件并重新创建它。 谁能解释导致这种情况发生的原因?
【问题讨论】:
-
您说您读取的文件是二进制文件,但是您尝试像读取文本文件一样读取它? 并且你像二进制文件一样写入文本文件?
-
fscanf()等函数并非设计用于处理二进制文件。他们期望文本应以该语言支持的特定标准提供。 -
看看Why is “while ( !feof (file) )” always wrong?你需要检查
fscanf的返回(你可能应该从二进制文件中读取char-by-char或使用fread而不是fscanf- - 用于格式化文本...) -
我已将
fscanf替换为以下语句:fread((char *)&p, sizeof(p),1,fraf);并且二进制文件中的内容显示在文本文件中,但它是二进制格式而不是文本格式。 -
如果你想要文本格式的输出文件,你必须使用
fprintf(ftxt,"%d\t",p.ID)这样的文本写入功能将p的每个字段写入它
标签: c file binary text-files binaryfiles