Προς το περιεχόμενο

διάβασμα/γράψιμο δυαδικών αρχείων σε C


kostas111

Προτεινόμενες αναρτήσεις

Δημοσ.

Έτσι που τα λες εγώ καταλαβαίνω ότι δε χρειάζεσαι casting ούτε buffers. Η δομή της πληροφορίας σου στη μνήμη μπορεί ΠΑΝΤΑ να είναι μια λίστα από struct.

Μην μπερδεύεσαι με το πως γράφονται στο αρχείο, στη μνήμη δε βολεύει να αναπαρασταθεί με τον ίδιο τρόπο.

Π.χ. δηλώνεις struct {

char name[20], surname[20], address[80];

int something;

double date;

enum DIATAKSH permutation;

}

 

Το τελευταίο, το permutation μπορείς να το βάλεις προαιρετικά εάν θες να γράφονται με την ίδια σειρά που τα διάβασες.

 

Εάν το αρχείο σου αποτελείται από εγγραφές 5 πεδίων σε οποιαδήποτε διάταξη, τότε αναγκαστικά (εκτός κι αν δουλεύεις με variants ή objects) κάποια στιγμή θα γίνουν κάποια if, αυτά με τα οποία θα βρεις τι τύπος είναι κάθε δεδομένο. Εγώ σου προτείνω αυτά τα if να γίνουν κατά την ανάγνωση του αρχείου, οπότε στη συνέχεια να δουλεύεις με "κανονικές" μεταβλητές χωρίς να χρειάζεσαι διαρκώς casting.

Δημοσ.

file Sta,

para para polu endiaferonta auta pou les...

kai mallon etsi tha ginei... (twra den kserw akoma an doulepsei...)

ara ama kserw oti diavazw 100 bytes pou mporei na einai diaforoi typoi kanw:

for(i=o;i<99;i++)

fread(data,sizeof(data),1,fp);

opou data:unsigned char data[100];

apo to arxeio kai meta me th memcpy kanw afta pou les swsta?

se eyxaristw para polu!

 

file alksig kai esi kala ta les apla thewreis oti kserw ta 5 pedia apla den kserw th diataksi

egw den kserw kan ta pedia.apla kserw oti einai 5 alla den kserw ti..

(alkis eimaste kai stin idia polh.... )

Sas eyxaristw PARA polu...

Δημοσ.

.... kai meta apo merikes wres douleias doulepse!!!

DOULEPSE!!!

me to unsigned char kai meta memcpy opws eipe o "sta"!!

elpizw na einai ok twra kai na mhn prepei na to ksanaallazw!!

eyxaristw para polu!!!

Δημοσ.

να ρωτησω κατι αλλα μη με βρισετε!τι ειναι τα δυαδικα αρχεια κ που μπορω να διαβασω κατι για αυτα?

Δημοσ.

Γιατι να σε βρίσουμε?Εγω τόσες ερωτήσεις έκανα και τα παιδιά μου απαντήσανε...

ναναι καλά!!

τα δυαδικά αρχεία είναι αρχεία όπου γράφουμε οποιονδήποτε τύπο δεδομένων χρησιμοποιώντας δυαδική αναπαράσταση και όχι σαν κείμενο.

Στα αρχεία κειμένου για να γράψουμε και να διαβάσουμε κάτι πρέπει να μετατραπεί από δυαδική μορφή σε ancII και το αντίστροφο ενώ με δυαδικά αρχεία δεν γίνεται τέτοιες μετατροπές τύπων δεδομένων.

Αυτή είναι μια "μπακαλίστικη" περιγραφή των δυαδικών αρχείων...

Τωρα.. γιατι τα χρειάζεσαι για να σου πουμε τι να διαβάσεις...

Για παράδειγμα αν θέλεις να κάνεις κάτι σε προγραμματισμό με C κάθε βιβλίο της C έχει ειδικό κεφάλαιο για Αρχεία κειμένου και δυαδικά αρχεία. Εκεί μπορεις να μάθεις περισσότερα όσο αναφορά τη C...

Αν θέλεις κάτι άλλο πες μας να βοηθήσουμε αν γνωρίζουμε!

Δημοσ.

ara ama kserw oti diavazw 100 bytes pou mporei na einai diaforoi typoi kanw:

for(i=o;i<99;i++)

fread(data' date='sizeof(data[i']),1,fp);

opou data:unsigned char data[100];

apo to arxeio kai meta me th memcpy kanw afta pou les swsta?

 

Δεν ξέρω πώς το έκανες τελικά, εγώ προτείνω το εξής:

 

>
  fread(data,1,sizeof data, fp);

 

και μετά μπορείς να κάνεις memcpy().

Δημοσ.

Ο ίδιος τρόπος είναι, απλώς έτσι όπως το έχεις γράψει δεν είναι σωστό, αφού το πρώτο όρισμα της fread δεν είναι δείκτης στο buffer που θέλεις να αποθηκευσεις. Σωστότερο θα ήταν το εξής:

 

>
for (...)
  fread(data+i,1,1,fp);

Δημοσ.

esi swsta ta les...

alla apo oti vlepw egw exw kanei akoma pio mpakalika

 

for(j=0;j<100;j++)

fread(&data[j],1,1,fp);

 

(prin sto post ksexasa na grapsw to &)

alla doulepse...

kai ksereis oti douleuei den to peirazoume ;)

tha to peiraza mono gia to prohgoumeno tropo xwris for!!

;)

Δημοσ.

Αυτό είναι σωστό μιας και: &data[j]===data+j. Ούτε εγώ θα το πείραζα, απλώς είναι σημαντικό (ιδιαίτερα στη C) να γράφεις σωστά γιατί κάποια πράγματα μπορεί να δουλεύουν τώρα και όχι αύριο (λόγω undefined behaviour).

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...