Εργαστήριο 9: Αρχεία

Σχετικά έγγραφα
(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Μεθόδων Επίλυσης Προβλημάτων

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 20. Αρχεία. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 18η: Διαχείρηση Αρχείων

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διαδικασιακός Προγραμματισμός

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Επεξεργασία Αρχείων Κειµένου

Εισαγωγή στον Προγραμματισμό

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Μεθόδων Επίλυσης Προβλημάτων

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ ΣΤΗΝ C

ιαφάνειες παρουσίασης #6 (β)

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

Ανάπτυξη και Σχεδίαση Λογισμικού

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Προγραμματισμός ΙI (E)

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Κεφάλαιο 12: Είσοδος και έξοδος δεδομένων σε αρχεία

S, (5, -3, 34, -23, 7) ( *, _

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Ενδεικτική περιγραφή μαθήματος

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Η γλώσσα προγραμματισμού C Χειρισμός αρχείων

Διάλεξη 4: Οργάνωση Προγράμματος & Ανατομία Προγράμματος

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

C: Από τη Θεωρία στην Εφαρμογή

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματιστικές τεχνικές

Η γλώσσα προγραμματισμού C

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διαδικαστικός Προγραμματισμός

Προγραμματισμός Ι (ΗΥ120)

Μεθόδων Επίλυσης Προβλημάτων

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

Περιεχόμενα. Πρόλογος... 21

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός H/Y Ενότητα 7: Αρχεία. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

Λειτουργικά Συστήματα (Λ/Σ)

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Προγραμματισμό για ΗΜΥ

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Αρχεία Δεδομένων. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Η γλώσσα προγραμματισμού C

Ηβασικήσυνάρτηση προγράμματος main()

FILE *fopen(const char *fname, const char *mode) void fclose(file *f) void fflush(file *f)

Προγραμματισμός Η/Υ. Χειρισμός Αρχείων. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Διαδικασιακός Προγραμματισμός

Προγραμματισμό για ΗΜΥ

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y)

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Η βασική συνάρτηση προγράμματος main()

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Δομημένος Προγραμματισμός (ΤΛ1006)

Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Ι (ΗΥ120)

είκτες και Πίνακες (2)

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Προγραµµατισµός. Αρχεία

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

Προγραμματισμός συστημάτων UNIX/POSIX. Ανακατευθύνσεις (redirections)

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Μεθόδων Επίλυσης Προβλημάτων

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

Εισαγωγή στον Προγραμματισμό

Περιεχόμενα. Πρόλογος... 17

4ο σετ σημειώσεων - Χειρισμός αρχείων και structs

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Transcript:

Εργαστήριο 9: Αρχεία Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αρχεία, Είσοδος/Έξοδος από/προς αρχεία - Δυαδικά αρχεία - Παραδείγματα ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1

Επανάληψη στην Αποθήκευση (Storage) Για να αποθηκεύσουμε δεδομένα από ένα πρόγραμμα, πρέπει να χρησιμοποιήσουμε την Δευτερεύουσα Μνήμη ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2

Επανάληψη στην Αποθήκευση (Storage) Η πιο συνηθισμένη μορφή δευτερεύουσας μνήμη η οποία αξιοποιείτε από ένα πρόγραμμα είναι ο Μαγνητικός Δίσκος. Μαγνητικός Δίσκος:Αποτελείτε από ένα ή περισσότερους δίσκους με μαγνητική επικάλυψη Τα δεδομένα αποθηκεύονται σε τομείς (sectors). Οι δίσκοι διαθέτουν την δυνατότητα σειριακής αλλά και άμεσης πρόσβασης στα δεδομένα. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Επανάληψη στα Λειτουργικά Συστήματα (Operating Systems) Ποιος Διαχειρίζεται τους Πόρους (Μνήμη, Δίσκο, Επεξεργαστή, κτλ) σε ένα Υπολογιστικό Σύστημα? ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ (Operating System) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

Λειτουργικά Συστήματα και Συστήματα Διαχείρισης Αρχείων Κάθε γλώσσα προγραμματισμού έχει κάποια βιβλιοθήκη η οποία προσφέρει λειτουργίες πρόσβασης σε αρχεία αποθηκευμένα σε μονάδες Δευτερεύουσας Μνήμης. Στην C, oι λειτουργίες αυτές προσφέρονται από την βιβλιοθήκη <stdio.h>. Η Βιβλιοθήκη επικοινωνεί με το υποσύστημα διαχείρισης αρχείων (File System)του λειτουργικού συστήματοςτο οποίο στην συνέχεια διεκπεραιώνει τις λειτουργίες που ζητά ο προγραμματιστής.(το filesystemστα Windows είναι το FAT32, NTFS) Ας δούμε τι περιέχουν εσωτερικά τα αρχεία (δηλαδή πως αποθηκεύουν τις πληροφορίες) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

Αρχεία Κειμένου Θυμηθείτε ότι το αρχείο είναι μία ακολουθία bytes. π.χ. 011000110110000101110010 ascii:99 ascii:97 ascii:114 c a r Οι χαρακτήρες αυτοί είναι αποθηκευμένοι σειριακά στο αρχείο και διαχωρίζονται με διάφορους ειδικούς χαρακτήρες Αρχείο όπως το βλέπει ο χρήστης Car Test hello Αρχείο στην Πραγματικότητα Car\nTest\thelloEOF Τέλος αρχείου ascii: -1 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6

Αρχεία Κειμένου Ο Πίνακας ASCII Αρκετοί χαρακτήρες είναι κρυμμένοι δηλαδή δεν φαίνονται στην οθόνη και στα αρχεία ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7

Εισαγωγή στα Αρχεία Τώρα θα επικεντρωθούμε στις λειτουργίες εγγραφής και ανάγνωσης σε αρχεία της βιβλιοθήκης <stdio.h>. Η επεξεργασία αρχείων γίνεται κατά τον ακόλουθο τρόπο: Α) Συσχετίζουμε μία οντότητατης C με το αρχείο (άνοιγμα του αρχείου) Β) Πραγματοποιούμε τις λειτουργίεςανάγνωσης και εγγραφής δεδομένων C) Κλείνουμε το αρχείο ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

A) Άνοιγμα Αρχείων Συνάρτηση fopen(stdio.h) FILE *fopen(char *filename, char *mode); Η παράμετρος filenameυποδεικνύει το όνομα του αρχείου που επιθυμούμε να ανοίξουμε Το Mode υποδεικνύει το είδος της πράξης (π.χ. Read, write, read-write, etc) main() { FILE *fp; fp= fopen("myfile.txt", "r");. Οντότητα Διαχείρισης Αρχείου Τύπος Ανοίγματος (εδώ READ) Όνομα Αρχείου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9

A) Άνοιγμα Αρχείων H παράμετρος modeυποδεικνύει τον τρόπο με τον οποίο θέλουμε να προσπελάσουμε το αρχείο Mode r w b a Σηµασία Μόνο Aνάγνωση. Αν το αρχείο δεν υπάρχει, επιστρέφεται NULL Μόνο Eγγραφή. Αν το αρχείο δεν υπάρχει δηµιουργείται, αν υπάρχει τα περιεχόµενά του καταστρέφονται. Binary File: Υποδηλώνουµε ότι πρόκειται να επεξεργαστούµε αρχείο µε δυαδικά δεδοµένα. Προσθήκη. Αν το αρχείο δεν υπάρχει, δηµιουργείται. r+ Ανάγνωσηκαι εγγραφή. Αν το αρχείο δεν υπάρχει, επιστρέφεται NULL. w+ Ανάγνωσηκαι εγγραφή.αν το αρχείο δεν υπάρχει δηµιουργείται, αν υπάρχει τα περιεχόµενά του καταστρέφονται. a+ Προσθήκηκαι ανάγνωση. Αν το αρχείο δεν υπάρχει, δηµιουργείται. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10

Γ) Κλείσιμο Αρχείων Συνάρτηση fclose(stdio.h) intfclose(file *fp); Η παράμετρος fpυποδεικνύει την Οντότητα Διαχείρισης Αρχείου. main() { FILE *fp; fp= fopen("myfile.txt", "r"); fclose(fp);. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11

Β) Άνοιγμα/ Εγγραφή/ Κλείσιμο Αρχείων Γράψετε ένα απλό πρόγραμμα που προσθέτει την λέξη Hello σε ένα αρχείο. #include <stdio.h> Append mode intmain() { FILE *fp; fp= fopen("myfile.txt", "a");// άνοιγμα αρχείου fprintf(fp, "Hello"); // εκτύπωση σε αρχείο fclose(fp); // κλείσιμο αρχείου return 0; Ας δούμε τώρα τις εντολές fprintf, fclose σε περισσότερο βάθος ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12

Β) Άνοιγμα/ Εγγραφή/ Κλείσιμο Αρχείων #include <stdio.h> main() { FILE *fp; // Trytoopenthefile if((fp = fopen("myfile.txt", a")) == NULL) { printf("error opening file\n"); exit(1); // Writetothefile Hello 5 6 fprintf(fp, "Hello%d %d, 5,6); fclose(fp); Toίδιο πρόγραμμα με συνθήκη έλεγχου που ελέγχει αν άνοιξε το αρχείο Π.χ. Αν γέμισε ο δίσκος τότε το fopenθα αποτύχει, και ο χρήστης του προγράμματος μπορεί να ειδοποιηθεί με μήνυμα λάθους ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 13

Β) Άνοιγμα/ Εγγραφή/ Κλείσιμο Αρχείων #include <stdio.h> main() { FILE *fp; inta; if((fp = fopen("myfile.txt", r")) == NULL) { printf("error opening file\n"); exit(1); // Διάβασε ένα αριθμό από το αρχείο fscanf(fp, %d, &a); // Closethefile fclose(fp); Mode Ανάγνωσης Ανάγνωση ενός ακεραίου από το αρχείο ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 14

Β) Άνοιγμα/ Εγγραφή/ Κλείσιμο Αρχείων #include <stdio.h> main() { FILE *fp; inta; if((fp = fopen("myfile.txt", r")) == NULL) { printf("error opening file\n"); exit(1); // Διάβασε ένα αριθμό από το αρχείο fscanf(fp, %d, &a); // Εκτύπωσε τον αριθμό printf( %d, a); // Closethefile fclose(fp); Ανάγνωση ενός ακεραίου από αρχείο και εκτύπωση του στην οθόνη ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 15

Β) Άνοιγμα/ Εγγραφή/ Κλείσιμο Αρχείων #include <stdio.h> main() { FILE *fp; inta; if((fp = fopen("myfile.txt", r")) == NULL) { printf("error opening file\n"); exit(1); fscanf(fp, %d, &a); printf( %d, a); fscanf(fp, %d, &a); printf( %d, a); fclose(fp); Ανάγνωση δυο ακέραιων από αρχείο και εκτύπωση τους στην οθόνη ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 16

Πρόγραμμα Ανάγνωσης Πολλών Αριθμών Κάποιος σας δίδει ένα μεγάλο αρχείο αριθμών. Σας ζητά να βρείτε τον μέγιστο αριθμό στο αρχείο. Myfile.txt 5 6 6 4 5 5 53 34 4 4 100 54 54 543 6 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 17

Πρόγραμμα Ανάγνωσης Πολλών Αριθμών #include <stdio.h> main() { FILE *fp; inta;intmax=-1; if((fp = fopen("myfile.txt", r")) == NULL) { printf("error opening file\n"); exit(1); while(fscanf(fp, "%d",&a)!= EOF) { //printf("%d\n", a); if (a>max){ max = a; printf( max:%d, max); // Print the MAX fclose(fp); // Close the file ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 18

Άσκηση #include <stdio.h> #include <stdlib.h> main() { FILE *fp; inti; intmax=-1; srand(time(null)); Τι ακριβώς κάνει το πιο κάτω πρόγραμμα? if((fp = fopen("myfile.txt", "w")) == NULL) { printf("error opening file\n"); exit(1); for (i=0;i<10;i++) { fprintf(fp, "%d\n", rand() % 1000); // Closethefile fclose(fp); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 19

ΔυαδικάΑρχεία Όλα τα αρχεία περιέχουν Χαρακτήρες ASCII? OXI Ας δούμε πως είναι κωδικοποιημένο ένα αρχείο εικόνας GIF (GraphicsInterchangeFormat), συγκεκριμένα τηνγνωστή εικόνα του folder στα Windows Αρχή Το σχήμα δείχνει ότι οι εικόνες (όπως και ΌΛΑ τα αρχεία) είναι ουσιαστικά μια σειρά από bytes(στο σχήμα κωδικοποιημένα στο δεκαεξαδικόσύστημα για να κερδίσουμε χώρο) 47 16 =1000111 2 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 20

Δυαδικά Αρχεία (συν.) Για άνοιγμα ενός δυαδικού αρχείου χρησιμοποιούμε όπως και για άνοιγμα αρχείων κειμένου τη συνάρτηση fopen, δίνοντας στο δεύτερο όρισμα της fopenτο γράμμα b το οποίο ορίζει ότι θα πρέπει να ανοιχθεί δυαδικό αρχείο. Στο λειτουργικό σύστημα Unix η χρήση τουbδεν είναι απαραίτητη, σε άλλα όμως συστήματα επιβάλλεται. Προτείνεται πάντα να χρησιμοποιείται. Για παράδειγμα η πιο κάτω δήλωση και εντολή έχουν σαν αποτέλεσμα το άνοιγμα του αρχείου file.txt ως δυαδικό αρχείογια ανάγνωση: FILE *fp; fopen( file.bin, rb ); ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοιγια Ηλ. Μηχ. και Μηχ. Υπολ.

Συναρτήσεις Επεξεργασίας Δυαδικών Αρχείων 1.int fwrite(void *p, int s, int n, FILE *fp) Η συνάρτηση αυτή γράφει στο αρχείο στο οποίο αναφέρεται ο δείκτης fp, στοιχεία πλήθουςn, και μεγέθους s, η αρχή των οποίων καθορίζεται από τον δείκτη p. Επιστρέφεται το πλήθος των στοιχείων που γράφηκαν. void *p Επειδή αυτή η συνάρτηση μπορεί να πάρει σαν τιμή οποιονδήποτε είδος pointer (char *, int*, struct*x, etc), χρησιμοποιείτε pointer σεvoid (void *p). Κατά την διάρκεια της κλήσης θα κάνουμε casting σε (void *), δες παράδειγμα σελ.7 2.int fread(void *p, int s, int n, FILE* fp) Η συνάρτηση αυτή διαβάζει από το αρχείο στο οποίο αναφέρεται ο δείκτης fp, στοιχεία πλήθους n, και μεγέθους s, και τα τοποθετεί στη μνήμη ξεκινώντας από εκεί που δείχνει ο δείκτης p. Eπιστρέφεταιτο πλήθος των στοιχείων που διαβάστηκαν. ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοιγια Ηλ. Μηχ. και Μηχ. Υπολ.

Παράδειγμα Είσοδος/Έξοδος σε Δυαδ. Αρχείο Το πιο κάτω πρόγραμμα, γράφει στο αρχείοfile.binτις δέκα πρώτες δομές τύπου Person ενός πίνακα Α και στην συνέχεια διαβάζει αυτές τις δέκα εγγραφές και τις τοποθετεί στον πίνακα Β. #include <stdio.h> struct Person { char name[20]; int age; A[20], B[10]; int main(void){ FILE *fp; fp = fopen( file.bin, wb ); fwrite((void *)A, sizeof(struct Person), 10, fp); fclose(fp); ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοιγια Ηλ. Μηχ. και Μηχ. Υπολ.

Παράδειγμα Είσοδος/Έξοδος σε Δυαδ. Αρχείο (συν.) fp = fopen( file.bin, rb ); fread((void *)B, sizeof(struct Person), 10, fp); fclose (fp); ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοιγια Ηλ. Μηχ. και Μηχ. Υπολ.