[Powered by Google Translate] [File I / O]
[Jason Hirschhorn, Harvard University]
[Þetta er CS50, CS50.TV]
Þegar við hugsum um skrá, hvað kemur upp í hugann er Microsoft Word skjal,
a JPEG, eða MP3 lag,
og við samskipti við hvert af þessum tegundum af skrám á mismunandi hátt.
Til dæmis, í Word skjali við að bæta texta
en með JPEG mynd við gætum klippa út brúnir eða retouch litum.
En undir hetta allar skrár í tölvunni okkar eru ekkert annað
en langa röð af núllum og sjálfur.
Það er allt að tilteknu forriti sem hefur áhrif á skrá
að ákveða hvernig á að vinna þetta langa röð og kynna hana til notandi.
Annars vegar skjal getur að líta á aðeins eitt bæti,
eða 8 núll og sjálfur, og sýna ASCII staf á skjánum.
Á hinn bóginn, a punktamynd mynd getur að líta á 3 bæti,
eða 24 núll og sjálfur,
og túlka þá eins og 3 sextánskur tölur
sem endurspegla gildi fyrir rautt, grænt og blátt
í einu pixla á mynd.
Hvað sem þeir kunna að líta út á skjánum, í kjarna sínum,
skrár eru ekkert annað en röð af núllum og sjálfur.
Svo við skulum kafa í og ​​líta á hvernig við vinna raunverulega þessi núll og sjálfur
þegar það kemur að því að skrifa í og ​​lesa úr skrá.
>> Ég ætla að byrja með því að brjóta það niður í einfalda 3-hluta aðferð.
Næst, ég kafa í tvo kóða dæmi sem sýna þessa þrjá hluta.
Að lokum, ég endurskoða ferlið og sumir af mikilvægustu upplýsingar um það.
Eins og með hvaða skrá sem situr á skjáborðinu þínu,
The fyrstur hlutur til gera er að opna hana.
Í C við gerum þetta með því að lýsa bendi til fyrirfram ákveðnum strúktúr
sem táknar skrána á disknum.
Í virka símtali ákveða við einnig hvort við viljum að skrifa og lesa úr skrá.
Næst gerum við í raun að lesa og skrifa.
There ert a tala af sérhæfðum aðgerðum sem við getum notað í þessum hluta,
og næstum allir af þeim byrja með bókstafnum F sem stendur fyrir skrá.
Síðasta opna ætt við Little Red X í efra horninu á skrá á tölvunni þinni,
við að loka skrá með endanlegri virka símtalinu.
Nú þegar við höfum almenna hugmynd um hvað við erum að fara að gera,
skulum kafa í kóðann.
>> Í þessari skrá, höfum við tvær C skrá og samsvarandi executable þeirra skrá.
The ritvél program tekur einn stjórn lína rifrildi,
nafn á skjali sem við viljum búa.
Í þessu tilfelli, munum við kalla það doc.txt.
Við skulum hlaupa the program og slá inn nokkrar línur.
Hæ. Mitt nafn er Jason.
Að lokum munum við slá "hætta."
Ef við lista nú allar skrár í þessari möppu,
sjáum við að nýtt skjal til heitir doc.txt.
Það er skrá þetta forrit bara til.
Og auðvitað, það er líka ekkert annað en langa röð af núllum og sjálfur.
Ef við opnum skjalið,
sjáum við 3 línur af kóða við inn í kerfi okkar -
Hæ. Maí heitir Jason.
En hvað er í raun að gerast þegar typewriter.c keyrir?
Fyrsta lína af áhuga fyrir okkur er lína 24.
Í þessari línu, lýsa við skrá músina okkar.
Fallið sem skilar þessu músina, fopen, tekur tvær röksemdir.
Í fyrsta lagi er að skrá nafn þ.mt skrá eftirnafn ef við á.
Muna að skrá eftirnafn hefur ekki áhrif á skrána á lægsta stigi þess.
Við erum alltaf að takast á við langa röð af núllum og sjálfur.
En það er áhrif hvernig skrár eru túlkuð og forrit Hvað eru notuð til að opna þá.
Seinni rök til fopen er einn bókstafur
sem stendur fyrir það sem við stefnum á að gera eftir að við að opna skrána.
Það eru þrír möguleikar fyrir þessa röksemdafærslu - W, R, og A.
Við höfum valið W í þessu tilfelli vegna þess að við viljum að skrifa skrána.
R, eins og þú geta sennilega giska á, er að lesa hana.
Og er að auka við í skrána.
Þó bæði m og má nota til að skrifa í skrár,
W mun byrja að skrifa frá upphafi skrárinnar
og hugsanlega skrifa nein gögn sem áður hafa verið geymdar.
Sjálfgefið er að skrá við opna, ef það er ekki þegar fyrir hendi,
er búið í núverandi vinna möppu okkar.
Hins vegar, ef við viljum komast í eða búa til skrá á öðrum stað,
í fyrstu rök fopen,
við getum tilgreina skrá gangstígur til viðbótar skrá nafn.
Þó fyrsta hluta þessa ferlis er aðeins ein lína af kóða langur,
það er alltaf gott að fela annað sett af línum
að athuga að tryggja að skrá tókst opnað eða búið til.
Ef fopen skilar null, myndum við ekki vilja til að sækja fram með áætlun okkar,
og það getur gerst ef stýrikerfið er út af minni
eða ef við reynum að opna skrána í möppu sem við ekki hafa rétta leyfi.
>> Part tveir í ferlinu fer fram í lykkju meðan Ritvél er.
Við notum CS50 bókasafn virka til að fá inntak frá notanda,
og miðað við að þeir vilja ekki að hætta í áætluninni,
notum við virka fputs að taka band og skrifa það að skránni.
fputs er aðeins eitt af mörgum hlutverkum sem við gætum notað til að skrifa á skrá.
Aðrir eru fwrite, fputc, og jafnvel fprintf.
Burtséð frá viðkomandi starfsemi við á endanum að nota, þó,
öllum þeim þarf að vita, í gegnum rök þeirra,
amk tveir hlutir -
hvað þarf að vera skrifleg og þar þarf að vera skrifuð á.
Í okkar tilviki, inntak er band sem þarf að skrifa
og FP er bendillinn að beini okkur að þar sem við erum að skrifa.
Í þessari áætlun, hluti tvö af ferlinu er frekar einfalt.
Við erum einfaldlega að taka streng frá notanda
og bæta því beint til skrá okkar með litla til-engin inntak löggilding eða öryggi eftirlit.
Oft, þó, Part Two tekur upp megnið af kóðann þinn.
Að lokum, hluti þrjú er á línu 58, þar sem við að loka skrá.
Hér við köllum fclose og gefa það upprunalega skrá músina okkar.
Í síðari línu, aftur við núll, merkja lok kerfis okkar.
Og, já, hluti þrjú er eins einfalt eins og þessi.
>> Við skulum fara að lesa úr skrá.
Aftur í skrá okkar höfum við skrá sem heitir printer.c.
Við skulum hlaupa með skrá við bjuggum bara -
doc.txt.
Þessi áætlun, eins og nafnið gefur til kynna, mun einfaldlega prenta út innihald skrá framhjá henni.
Og þar sem við höfum það.
The línumaður af kóða við höfðum slegið fyrr og vistuð í doc.txt.
Hæ. Mitt nafn er Jason.
Ef við kafa inn printer.c,
sjáum við að fullt af kóða lítur svipað og við gengum bara í gegnum í typewriter.c.
Reyndar lína 22, þar sem við opnað skrá,
og lína 39, þar sem við lokað skrána,
eru bæði nánast eins typewriter.c, spara fyrir fopen annað rifrildi.
Í þetta sinn erum við að lesa úr skrá,
þannig að við höfum valið r stað w.
Svona, við skulum leggja áherslu á seinni hluta af ferlinu.
Í línu 35, sem annað ástand í 4 lykkju okkar,
við að hringja til fgets,
félagi virka til fputs undan.
Í þetta sinn höfum við þrjú rök.
Í fyrsta lagi er bendi á fylki af stöfum sem verður strengurinn geymd.
Annað er hámarksfjöldi stafa til að lesa.
Og þriðja er bendi á skrá sem við erum að vinna.
Þú munt taka eftir því að til lykkju lýkur þegar fgets skilar null.
Það eru tvær ástæður sem þetta gæti hafa gerst.
First, villa gæti hafa gerst.
Í öðru lagi, og líklegra var endir af the skrá náð og ekki fleiri stafir voru lesnar.
Í tilfelli þú ert að spá í, ekki tvær aðgerðir til að leyfa okkur að segja
sem ástæða er orsök fyrir þessu tiltekna null músina.
Og ekki að undra, þar sem þeir hafa að gera með að vinna með skrár,
bæði ferror virka og feof virka byrja með bókstafnum f.
>> Að lokum, áður en við lokum, einn fljótur huga um lok starfsemi skrá,
sem, eins og bara nefnd, er skrifað sem feof.
Oft þú munt finna sjálfan þig með því að nota á meðan og lykkjur til að smám saman að lesa þig í gegnum skrár.
Svona, þú þarft leið til að enda þessar lykkjur eftir að þú nærð í lok þessa skrá.
Starf feof á músina skrá og stöðva til sjá ef það er satt
myndi gera einmitt þetta.
Svona, meðan lykkja með ástand (! Feof (FP)) kann að virðast eins og a fullkomlega viðeigandi lausn.
Hins vegar segja að við höfum eina línu eftir í textaskrá okkar.
Við munum slá meðan lykkja okkar og allt vilja vinna út eins og til stóð.
Á næstu umferð með, program okkar vilja athuga hvort feof á FE er satt,
en - og þetta er mikilvægt atriði til að skilja hér -
það mun ekki vera satt bara ennþá.
Það er vegna þess að tilgangur feof er ekki að athuga
ef næsta kalla til að lesa aðgerð vilja högg the endir af the skrá,
heldur til að athuga hvort ekki the endir af the skrá hefur þegar verið náð.
Í tilviki þessu dæmi
lesa síðustu línuna af skrá okkar gengur fullkomlega vel,
en forritið er ekki enn vita að við höfum högg lok skrá okkar.
Það er ekki fyrr en það er einn til viðbótar að lesa að það gegn the endir af the skrá.
Þannig að rétt ástand væri eftirfarandi:
fgets og þrjú rök hennar - framleiðsla, stærð framleiðsla og FP -
og allt sem ekki jafn null.
Þetta er sú leið sem við tók í printer.c,
og í þessu tilfelli, eftir lykkju hættir,
þú gætir hringt feof eða ferror að tilkynna notanda um tiltekna rökstuðnings fyrir spennandi þessa lykkju.
>> Ritun til og lesa úr skrá er í flestum undirstöðu þess,
einfalt 3-hluta aðferð.
Fyrst opnar skrána.
Í öðru lagi leggjum nokkra hluti í skránni okkar eða taka nokkur atriði út af því.
Í þriðja lagi, loka við skrána.
Fyrsta og síðasta hluta er auðvelt.
Miðhluta er þar sem erfiður efni liggur.
Og þó undir hetta við erum alltaf að takast á við langa röð af núllum og sjálfur,
það er hjálp þegar erfðaskrá til að bæta við lag af abstrakt
sem snýr röð í eitthvað sem meira líkist það sem við erum að nota til að sjá.
Til dæmis, ef við erum að vinna með 24-bita punktamynd skrá,
við munum líklega vera að lesa eða skrifa þrjár bæti í einu.
Í því tilviki, myndi það gera vit í að skilgreina og viðeigandi nafn
a struct sem er 3 bæti stór.
>> Þó að vinna með skrár kann að virðast flókið,
nýta þau leyfa okkur að gera eitthvað sannarlega ótrúlegur.
Við getum breytt stöðu í heiminum utan program okkar,
við getum búið til eitthvað sem býr handan við líf kerfi okkar,
eða við getum jafnvel breyta einhverju sem var búið til fyrir áætlun okkar byrjaði að keyra.
Samskipti við skrá er sannarlega öflugur hluti af forritun í C
og ég er spennt að sjá hvað þú ert að fara að búa með henni í kóðann til að koma.
Mitt nafn er Jason Hirschhorn. Þetta er CS50.
[CS50.TV]
>> [Hlátur]
Allt í lagi. Einn að taka. Hér förum.
Þegar við hugsum um skrá - >> Ó, bíddu. Því miður.
[Hlátur] lagi.
Hey þarna.
Þegar við hugsum um skrá -
Þegar þú hugsa um skrá - Allt í lagi. Segðu mér þegar þú ert tilbúin.
Oh, frábært.
Þó að lesa úr teleprompter kann að virðast - nei. Slæmt minn.