2013-06-08 68 views
18

Có thể viết toàn bộ một struct vào một tập tinViết Struct vào một tập tin trong c

dụ:

struct date { 
    char day[80]; 
    int month; 
    int year; 
}; 
+9

có ................. –

+0

Đọc điều này cũng: [làm thế nào để viết struct trong một tập tin trong c] (http://www.codingunit.com/c-tutorial-binary-file-io) –

Trả lời

26

Có thể viết toàn bộ một struct vào một tập tin

Câu hỏi của bạn thực sự là viết các cá thể struct vào tệp.

  1. Bạn có thể sử dụng chức năng fwrite để đạt được điều này.
  2. Bạn cần chuyển tham chiếu trong đối số đầu tiên.
  3. sizeof mỗi đối tượng trong đối số thứ hai
  4. Số đối tượng đó để viết trong đối số thứ 3.
  5. Con trỏ tệp trong đối số thứ 4.
  6. Đừng quên mở tệp trong binary mode.
  7. Bạn có thể đọc các đối tượng từ tệp bằng cách sử dụng fread.
  8. Cẩn thận với độ tin cậy khi bạn đang viết/đọc trong các hệ thống cuối nhỏ và đọc/ghi trong hệ thống cuối lớn và ngược lại. Đọc how-to-write-endian-agnostic-c-c-code

    struct date *object=malloc(sizeof(struct date)); 
    strcpy(object->day,"Good day"); 
    object->month=6; 
    object->year=2013; 
    FILE * file= fopen("output", "wb"); 
    if (file != NULL) { 
        fwrite(object, sizeof(struct date), 1, file); 
        fclose(file); 
    } 
    

Bạn có thể đọc chúng trong cùng một cách .... sử dụng fread

struct date *object2=malloc(sizeof(struct date)); 
    FILE * file= fopen("output", "rb"); 
    if (file != NULL) { 
     fread(object2, sizeof(struct date), 1, file); 
     fclose(file); 
    } 
    printf("%s/%d/%d\n",object2->day,object2->month,object2->year); 
+1

ông cũng nên cẩn thận với cấu trúc đệm ít nhất –

+0

tôi cũng đã viết một số đối tượng C trong tệp và muốn đọc chúng lại và xử lý chúng. Nhưng, tôi không biết những đối tượng đã được ghi vào tập tin, nó có thể là bất kỳ, vì vậy, trong fread, tôi sẽ không biết sizeof() của đối tượng tôi đã được đọc. Ngoài ra, làm thế nào để đọc chính xác một objct tại một thời điểm? Làm thế nào fread có thể biết rằng bắt đầu và kết thúc của byte trong một tập tin đại diện cho ranh giới đối tượng? –

+0

Tôi đoán, nếu đó là trường hợp cần có cấu trúc cho tệp, ví dụ: giả sử bạn viết loại trong một dòng và đối tượng trong một dòng khác, v.v. sau đó từ chương trình dựa trên loại bạn có thể biết kích thước.. – pinkpanther

Các vấn đề liên quan