0
我无法从二进制文件复制并写入文本文件。我写了一个能够从文本文件复制并写入二进制文件的程序,但我无法做到相反。如何从二进制文件读取C文本文件?
这里是我有问题,我的功能:
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()这样的函数并没有设计用于处理二进制文件。他们期望文本,应该在由语言支持的特定标准中提供。 – Havenard
看看[**为什么是“while(!feof(file))”总是错的?**](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always -wrong?s = 1 | 2.6488)你需要检查'fscanf'的返回值(你可能应该从二进制文件中读取char-by-char'或者使用'fread'而不是'fscanf' - 是格式化文本...) –