簡體   English   中英

即使用“rb +”打開文件,它也不是用二進制寫的

[英]Even opening the file with “rb+” it isn't writing in binary

我聲明了這個結構:

typedef struct {
char *TITLE;
char *AUTHOR;
char *PUBLISHER;
int YEAR;
char *LANGUAGE;
int PAGES;
float PRICE;
} Book;  

我正在嘗試使用下面的函數在一個名為“BD_Books.bin”的空文件中以二進制形式寫入Book:

void InsertBook(Book *L){
FILE *arq = fopen("BD_books.bin", "rb+");
if(arq == NULL){
    printf("ERROR WHILE OPENING FILE!!");
    return;
}
int regFile = -1;

fseek(arq, 0, SEEK_SET); //setting "pointer" to the beggining of file
fscanf(arq, "%d", &regFile); //reading first integer from file
if(regFile == -1){ //if the file is empty
        fwrite(L->TITLE, sizeof(char), strlen(L->TITLE), arq);
        fwrite(L->AUTHOR, sizeof(char), strlen(L->AUTHOR), arq);
        fwrite(L->PUBLISHER, sizeof(char), strlen(L->PUBLISHER), arq);
        fprintf(arq, "%d", L->YEAR);
        fwrite(L->LANGUAGE, sizeof(char), strlen(L->LANGUAGE), arq);
        fprintf(arq, "%d", L->PAGES);
        fprintf(arq, "%f", L->PRICE);
        return;
}  

我可以按照我想要的方式編寫所有數據,但問題是我必須以二進制格式編寫它,但是函數os作為文本寫入。
不是fopen("BD_books.bin", "rb+"); 足以告訴fwrite()將所有數據寫為二進制,因為我用“rb +”參數打開文件?

因為您需要使用fwrite()而不是fprintf() ,所以fprintf()會將字符串寫入文件,其字節表示形式與其字符串表示形式相同。

嘗試聊天

fprintf(arq, "%d", L->YEAR);

fwrite(&L->YEAR, sizeof(L->YEAR), 1, arq);

而且, sizeof(char)保證為1 ,因此使用它會給代碼添加不必要的丑陋,使其更難閱讀。

我認為代替rb應該是wb,因為你正在寫文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM