Acasă Finanțe personale C Programare: Cum se acceseaza fisiere stocate in stocare aleatoare - dummies

C Programare: Cum se acceseaza fisiere stocate in stocare aleatoare - dummies

Cuprins:

Video: Week 9, continued 2024

Video: Week 9, continued 2024
Anonim

Accesarea aleatorie a fișierelor în programarea C nu are nimic de-a face cu numerele aleatoare. Mai degrabă, fișierul poate fi accesat în orice punct de aici, chiar și acolo. Acest tip de acces funcționează cel mai bine atunci când fișierul este punctat cu înregistrări de aceeași dimensiune. Noțiunea de înregistrări aduce structuri care pot fi cu ușurință scrise într-un fișier și apoi recuperate individual, selectiv sau toate simultan.

Cum se citește și derulează

Pe măsură ce programul dvs. citește date dintr-un fișier, acesta urmărește poziția de la care datele sunt citite în fișier. Se menține o poziție a cursorului, astfel încât locația la care codul să citească sau să scrie într-un fișier nu este pierdută.

Când deschideți pentru prima dată un fișier, poziția cursorului este la începutul fișierului, primul byte. Dacă citiți o înregistrare de 40 de octeți în memorie, poziția cursorului este de 40 de octeți de la început. Dacă citiți până la sfârșitul fișierului, poziția cursorului menține acea locație.

indicatorul de fișier , chiar dacă nu este o variabilă a indicelui sau un tip de pointer FILE. Este pur și simplu locația dintr-un fișier în care se citește următorul octet de date. Puteți să vă puneți în poziția cursorului utilizând câteva funcții interesante în C. Două dintre ele sunt ftell () și rewind (). Funcția ftell () returnează poziția curentă a cursorului care este decalată ca o valoare int lungă. Funcția Rewind () mută cursorul înapoi la începutul fișierului.

Buclele în timp în Tell și Rewind citesc în înregistrările din legătura. db. La linia 28, funcția ftell () returnează poziția cursorului. Dacă este mai mare decât o intrare (adică cea de-a doua intrare a fost citită), poziția cursorului este resetată la începutul fișierului prin funcția rewind () de la Linia 29.

TELL AND REWIND

#include # include #include int principal () {struct entry {char actor [32]; int an; titlu caractere [32];}; struct de intrare bond; FILE * a007; int count = 0; a007 = fopen ("obligațiune db", "r"); dacă (! a007) {puts ("SPECTER câștigă!"); ieșire (1);} în timp ce (fread (& bond, sizeof (struct entry), 1, a007)) {printf ("% st% dt% sn"; dacă (ftell (a007)> sizeof (intrare struct)) înapoi (a007); conta ++; dacă (numără> 10) se rupe;} fclose (a007); retur (0);}

Pentru a determina offsetul corespunzător, o declarație if compară rezultatul din funcția ftell () și operatorul sizeof pe intrarea structurii. Rețineți că ftell () întoarce doar o valoare lungă int, nu un număr specific de structuri.

Numărul de variabile, declarat și inițializat la linia 14, ține evidența de câte ori se repetă buclă. Dacă nu, programul s-ar derula fără sfârșit. Asta e rău. Deci, atunci când valoarea numărului este mai mare de 10, bucla se rupe și apoi fișierul se închide și programul se termină.

Exercițiu

1 : Tastați codul sursă de la Tell și Rewind în editorul dvs. Construiți și executați pentru a vedea cum funcționează funcțiile ftell () și rewind (). Cum să găsiți o înregistrare specifică

Când un fișier conține înregistrări de toate dimensiunile, puteți utiliza funcția fseek () pentru a scoate orice element individual. Formatul pentru fseek () este

fseek (mâner, offset, wherece);

mâner

este un mâner de fișier, un pointer FILE reprezentând un fișier care este deschis pentru citire. offset este numărul de octeți de la începutul, sfârșitul sau poziția curentă într-un fișier. Și de unde este una dintre cele trei constante: SEEK_SET, SEEK_CUR sau SEEK_END pentru poziția inițială, actuală sau sfârșitul unui fișier. Atâta timp cât fișierul conține înregistrări cu o dimensiune constantă, puteți folosi fseek () pentru a elimina orice înregistrare specifică, așa cum se arată în Găsirea unei înregistrări specifice într-un fișier.

Găsiți o înregistrare specială într-un fișier

#include #include #include int principal () {struct entry {char actor [32]; int an; titlu caractere [32];}; struct de intrare bond; FILE * a007; a007 = fopen ("obligațiune db", "r"); dacă (! a007) {puts ("SPECTER câștigă!"); ieșire (1);} fseek (a007, sizeof (intrare struct) * 1, SEEK_SET); fread (& bond, sizeof (intrare struct), 1, a007); printf ("% st% dt% sn", actor de obligatiuni, obligatiuni an, titlu de obligatiuni); fclose (A007); retur (0);}

Codul afișat în Găsirea unei înregistrări specifice într-un fișier este din nou destul de similar cu codul afișat în Lista 22-9. Adăugarea mare este funcția fseek (), afișată la rândul 21. Setează poziția cursorului astfel încât funcția fread () care urmează (a se vedea linia 22) se citește într-o înregistrare specifică situată în interiorul bazei de date.

La linia 21, funcția fseek () examinează fișierul reprezentat de mânerul a007. Decalajul este calculat prin înmulțirea dimensiunii structurii de intrare.

Ca și în cazul unei matrice, înmulțirea acestei mărimi cu 1 duce la înregistrarea

al doilea în fișier; multiplicați valoarea cu 0 (sau specificați doar 0 în funcție) pentru a citi prima înregistrare. Constanta SEEK_SET asigură că fseek () începe să privească de la începutul fișierului. Efectul net al codului este că a doua înregistrare a obligațiunii. fișierul db este afișat.

Exercițiul 2:

Tastați codul sursă din Găsirea unei înregistrări specifice într-un fișier. Construiți și executați pentru a vedea cea de-a doua înregistrare din fișier.

C Programare: Cum se acceseaza fisiere stocate in stocare aleatoare - dummies

Alegerea editorilor

Administrator de rețea: Zone de căutare inversă - dummies

Administrator de rețea: Zone de căutare inversă - dummies

Interogări DNS obișnuite sunt interogări de căutare înainte corespunde unui nume de domeniu complet calificat. O căutare inversă este opusul unei căutări forward: returnează numele de domeniu complet calificat al unei gazde pe baza adresei sale IP. Căutările inverse sunt posibile din cauza unui domeniu special numit ...

Rețea Elemente de bază: Clienți și servere - manechine

Rețea Elemente de bază: Clienți și servere - manechine

Computerul de rețea care conține hard disk-urile, imprimantele și alte resurse care sunt partajate cu alte calculatoare de rețea se numește un server. Acest termen vine în repetate rânduri, deci trebuie să-l amintiți. Scrie-o pe spatele mâinii tale stângi. Orice computer care nu este un server este numit client. Aveți ...

Retea Bazele: Poduri - dummies

Retea Bazele: Poduri - dummies

O punte este un dispozitiv care conecteaza doua retele astfel incat sa actioneze ca si cum ar fi o rețea. Podurile sunt utilizate pentru a împărți o rețea mare în două rețele mai mici din motive de performanță. Vă puteți gândi la un pod ca pe un repetor inteligent. Repetoarele ascultă semnale care coboară pe un cablu de rețea, amplifică ...

Alegerea editorilor

ÎMprumuta și tweak idei de la alte comunități online - dummies

ÎMprumuta și tweak idei de la alte comunități online - dummies

, Mai degrabă decât să ia ideile altcuiva complet pentru dvs. comunitate online, încercați să riffați pe aceeași idee, dar nu atât de mult încât este evident că nu sunteți creierul din spatele brainstorming-ului. Idei sunt acolo pentru a lua, dar nu ar fi mai degrabă văzute ca cineva inovatoare, nu cineva care scours pe web ...

Branding Blogul tău

Branding Blogul tău

Branding blog-ul tău merge mult spre a face dacă este ușor de recunoscut pentru cititorii tăi. Când vedeți un punct roșu în interiorul unui cerc roșu, ce magazin vine în minte? Ce zici de acele arcuri de aur? Un nume de marcă apare în minte atunci când vedeți simbolul swoosh? La fel ca magazinele populare, restaurantele și încălțămintea ...

Construiți un Blog Mama care este Sellable - dummies

Construiți un Blog Mama care este Sellable - dummies

Dacă obiectivul pe termen lung este de a vinde blogul dvs. ar trebui să o construiască cu acest scop în minte. Evitați asocierea prea intensă a blogului cu marca dvs. personală. Un blog care poate fi valoros cu orice scriitor la cârma trebuie să îndeplinească majoritatea, dacă nu toate, următoarele criterii: Blogul este concentrat ...

Alegerea editorilor

Cum să creați o nouă campanie de anunțuri LinkedIn - dummies

Cum să creați o nouă campanie de anunțuri LinkedIn - dummies

LinkedIn oferă servicii de publicitate pentru afacerea dvs. Dacă vă decideți să utilizați LinkedIn ca instrument de marketing, va trebui doar să obțineți o nouă campanie de anunțuri în lucrări. Când sunteți gata să începeți o nouă campanie, urmați acești pași:

Opțiuni de filtrare pentru anunțul dvs. LinkedIn - manechine

Opțiuni de filtrare pentru anunțul dvs. LinkedIn - manechine

Ce opțiuni de filtrare aveți pentru anunțul dvs. LinkedIn? Alte rețele de publicitate vă permit să filtrați publicul vizat de câteva atribute cunoscute ale persoanei care vă va vedea anunțul, sexul și locația membrilor din public. LinkedIn vă permite să faceți un pas mai departe permițându-vă ...

Oferind și primind viziuni pe LinkedIn - manechine

Oferind și primind viziuni pe LinkedIn - manechine

Deși mulți oameni cred că "Nu este ceea ce știi, știi, "care este unul dintre principalele motive pentru care LinkedIn este atât de valoros, mulți oameni (recrutorii, angajații, directorii executivi, investitorii și altele) sunt foarte interesați de ceea ce știi. În mod logic, oamenii care vă cunosc cel mai bine sunt oamenii din rețeaua dvs., care ...