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' - 是格式化文本...) –