1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [File I / O] 2 00:00:02,000 --> 00:00:04,000 [Jason Hirschhorn, Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Þetta er CS50, CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Þegar við hugsum um skrá, hvað kemur upp í hugann er Microsoft Word skjal, 5 00:00:11,000 --> 00:00:14,000 a JPEG, eða MP3 lag, 6 00:00:14,000 --> 00:00:17,000 og við samskipti við hvert af þessum tegundum af skrám á mismunandi hátt. 7 00:00:17,000 --> 00:00:20,000 Til dæmis, í Word skjali við að bæta texta 8 00:00:20,000 --> 00:00:24,000 en með JPEG mynd við gætum klippa út brúnir eða retouch litum. 9 00:00:24,000 --> 00:00:28,000 En undir hetta allar skrár í tölvunni okkar eru ekkert annað 10 00:00:28,000 --> 00:00:31,000 en langa röð af núllum og sjálfur. 11 00:00:31,000 --> 00:00:33,000 Það er allt að tilteknu forriti sem hefur áhrif á skrá 12 00:00:33,000 --> 00:00:38,000 að ákveða hvernig á að vinna þetta langa röð og kynna hana til notandi. 13 00:00:38,000 --> 00:00:41,000 Annars vegar skjal getur að líta á aðeins eitt bæti, 14 00:00:41,000 --> 00:00:45,000 eða 8 núll og sjálfur, og sýna ASCII staf á skjánum. 15 00:00:45,000 --> 00:00:48,000 Á hinn bóginn, a punktamynd mynd getur að líta á 3 bæti, 16 00:00:48,000 --> 00:00:50,000 eða 24 núll og sjálfur, 17 00:00:50,000 --> 00:00:53,000 og túlka þá eins og 3 sextánskur tölur 18 00:00:53,000 --> 00:00:56,000 sem endurspegla gildi fyrir rautt, grænt og blátt 19 00:00:56,000 --> 00:00:58,000 í einu pixla á mynd. 20 00:00:58,000 --> 00:01:01,000 Hvað sem þeir kunna að líta út á skjánum, í kjarna sínum, 21 00:01:01,000 --> 00:01:05,000 skrár eru ekkert annað en röð af núllum og sjálfur. 22 00:01:05,000 --> 00:01:08,000 Svo við skulum kafa í og ​​líta á hvernig við vinna raunverulega þessi núll og sjálfur 23 00:01:08,000 --> 00:01:12,000 þegar það kemur að því að skrifa í og ​​lesa úr skrá. 24 00:01:12,000 --> 00:01:15,000 >> Ég ætla að byrja með því að brjóta það niður í einfalda 3-hluta aðferð. 25 00:01:15,000 --> 00:01:19,000 Næst, ég kafa í tvo kóða dæmi sem sýna þessa þrjá hluta. 26 00:01:19,000 --> 00:01:23,000 Að lokum, ég endurskoða ferlið og sumir af mikilvægustu upplýsingar um það. 27 00:01:23,000 --> 00:01:25,000 Eins og með hvaða skrá sem situr á skjáborðinu þínu, 28 00:01:25,000 --> 00:01:28,000 The fyrstur hlutur til gera er að opna hana. 29 00:01:28,000 --> 00:01:31,000 Í C við gerum þetta með því að lýsa bendi til fyrirfram ákveðnum strúktúr 30 00:01:31,000 --> 00:01:33,000 sem táknar skrána á disknum. 31 00:01:33,000 --> 00:01:38,460 Í virka símtali ákveða við einnig hvort við viljum að skrifa og lesa úr skrá. 32 00:01:38,460 --> 00:01:41,660 Næst gerum við í raun að lesa og skrifa. 33 00:01:41,660 --> 00:01:44,800 There ert a tala af sérhæfðum aðgerðum sem við getum notað í þessum hluta, 34 00:01:44,800 --> 00:01:48,790 og næstum allir af þeim byrja með bókstafnum F sem stendur fyrir skrá. 35 00:01:48,790 --> 00:01:53,560 Síðasta opna ætt við Little Red X í efra horninu á skrá á tölvunni þinni, 36 00:01:53,560 --> 00:01:56,680 við að loka skrá með endanlegri virka símtalinu. 37 00:01:56,680 --> 00:01:59,540 Nú þegar við höfum almenna hugmynd um hvað við erum að fara að gera, 38 00:01:59,540 --> 00:02:02,000 skulum kafa í kóðann. 39 00:02:02,000 --> 00:02:06,100 >> Í þessari skrá, höfum við tvær C skrá og samsvarandi executable þeirra skrá. 40 00:02:06,100 --> 00:02:09,710 The ritvél program tekur einn stjórn lína rifrildi, 41 00:02:09,710 --> 00:02:12,060 nafn á skjali sem við viljum búa. 42 00:02:12,060 --> 00:02:16,160 Í þessu tilfelli, munum við kalla það doc.txt. 43 00:02:16,160 --> 00:02:19,080 Við skulum hlaupa the program og slá inn nokkrar línur. 44 00:02:19,080 --> 00:02:23,660 Hæ. Mitt nafn er Jason. 45 00:02:23,660 --> 00:02:26,710 Að lokum munum við slá "hætta." 46 00:02:26,710 --> 00:02:29,720 Ef við lista nú allar skrár í þessari möppu, 47 00:02:29,720 --> 00:02:33,770 sjáum við að nýtt skjal til heitir doc.txt. 48 00:02:34,190 --> 00:02:36,110 Það er skrá þetta forrit bara til. 49 00:02:36,110 --> 00:02:40,520 Og auðvitað, það er líka ekkert annað en langa röð af núllum og sjálfur. 50 00:02:41,100 --> 00:02:43,260 Ef við opnum skjalið, 51 00:02:43,260 --> 00:02:45,870 sjáum við 3 línur af kóða við inn í kerfi okkar - 52 00:02:46,060 --> 00:02:49,060 Hæ. Maí heitir Jason. 53 00:02:49,580 --> 00:02:52,090 En hvað er í raun að gerast þegar typewriter.c keyrir? 54 00:02:52,810 --> 00:02:55,520 Fyrsta lína af áhuga fyrir okkur er lína 24. 55 00:02:55,560 --> 00:02:58,490 Í þessari línu, lýsa við skrá músina okkar. 56 00:02:59,080 --> 00:03:03,140 Fallið sem skilar þessu músina, fopen, tekur tvær röksemdir. 57 00:03:03,140 --> 00:03:07,440 Í fyrsta lagi er að skrá nafn þ.mt skrá eftirnafn ef við á. 58 00:03:07,440 --> 00:03:10,980 Muna að skrá eftirnafn hefur ekki áhrif á skrána á lægsta stigi þess. 59 00:03:10,980 --> 00:03:14,640 Við erum alltaf að takast á við langa röð af núllum og sjálfur. 60 00:03:14,640 --> 00:03:19,630 En það er áhrif hvernig skrár eru túlkuð og forrit Hvað eru notuð til að opna þá. 61 00:03:19,630 --> 00:03:22,290 Seinni rök til fopen er einn bókstafur 62 00:03:22,290 --> 00:03:25,300 sem stendur fyrir það sem við stefnum á að gera eftir að við að opna skrána. 63 00:03:25,300 --> 00:03:30,630 Það eru þrír möguleikar fyrir þessa röksemdafærslu - W, R, og A. 64 00:03:30,630 --> 00:03:34,900 Við höfum valið W í þessu tilfelli vegna þess að við viljum að skrifa skrána. 65 00:03:34,900 --> 00:03:38,820 R, eins og þú geta sennilega giska á, er að lesa hana. 66 00:03:38,820 --> 00:03:41,760 Og er að auka við í skrána. 67 00:03:41,760 --> 00:03:44,960 Þó bæði m og má nota til að skrifa í skrár, 68 00:03:44,960 --> 00:03:47,460 W mun byrja að skrifa frá upphafi skrárinnar 69 00:03:47,460 --> 00:03:50,810 og hugsanlega skrifa nein gögn sem áður hafa verið geymdar. 70 00:03:50,810 --> 00:03:54,070 Sjálfgefið er að skrá við opna, ef það er ekki þegar fyrir hendi, 71 00:03:54,070 --> 00:03:57,180 er búið í núverandi vinna möppu okkar. 72 00:03:57,180 --> 00:04:00,540 Hins vegar, ef við viljum komast í eða búa til skrá á öðrum stað, 73 00:04:00,540 --> 00:04:02,650 í fyrstu rök fopen, 74 00:04:02,650 --> 00:04:05,840 við getum tilgreina skrá gangstígur til viðbótar skrá nafn. 75 00:04:05,840 --> 00:04:09,490 Þó fyrsta hluta þessa ferlis er aðeins ein lína af kóða langur, 76 00:04:09,490 --> 00:04:12,350 það er alltaf gott að fela annað sett af línum 77 00:04:12,350 --> 00:04:15,930 að athuga að tryggja að skrá tókst opnað eða búið til. 78 00:04:15,930 --> 00:04:20,300 Ef fopen skilar null, myndum við ekki vilja til að sækja fram með áætlun okkar, 79 00:04:20,300 --> 00:04:23,270 og það getur gerst ef stýrikerfið er út af minni 80 00:04:23,270 --> 00:04:27,940 eða ef við reynum að opna skrána í möppu sem við ekki hafa rétta leyfi. 81 00:04:27,940 --> 00:04:31,780 >> Part tveir í ferlinu fer fram í lykkju meðan Ritvél er. 82 00:04:31,780 --> 00:04:35,000 Við notum CS50 bókasafn virka til að fá inntak frá notanda, 83 00:04:35,000 --> 00:04:37,190 og miðað við að þeir vilja ekki að hætta í áætluninni, 84 00:04:37,190 --> 00:04:41,940 notum við virka fputs að taka band og skrifa það að skránni. 85 00:04:41,940 --> 00:04:46,700 fputs er aðeins eitt af mörgum hlutverkum sem við gætum notað til að skrifa á skrá. 86 00:04:46,700 --> 00:04:51,920 Aðrir eru fwrite, fputc, og jafnvel fprintf. 87 00:04:51,920 --> 00:04:54,840 Burtséð frá viðkomandi starfsemi við á endanum að nota, þó, 88 00:04:54,840 --> 00:04:57,480 öllum þeim þarf að vita, í gegnum rök þeirra, 89 00:04:57,480 --> 00:04:59,670 amk tveir hlutir - 90 00:04:59,670 --> 00:05:03,140 hvað þarf að vera skrifleg og þar þarf að vera skrifuð á. 91 00:05:03,140 --> 00:05:07,240 Í okkar tilviki, inntak er band sem þarf að skrifa 92 00:05:07,240 --> 00:05:11,290 og FP er bendillinn að beini okkur að þar sem við erum að skrifa. 93 00:05:11,290 --> 00:05:15,330 Í þessari áætlun, hluti tvö af ferlinu er frekar einfalt. 94 00:05:15,330 --> 00:05:17,360 Við erum einfaldlega að taka streng frá notanda 95 00:05:17,360 --> 00:05:22,120 og bæta því beint til skrá okkar með litla til-engin inntak löggilding eða öryggi eftirlit. 96 00:05:22,120 --> 00:05:26,160 Oft, þó, Part Two tekur upp megnið af kóðann þinn. 97 00:05:26,160 --> 00:05:30,580 Að lokum, hluti þrjú er á línu 58, þar sem við að loka skrá. 98 00:05:30,580 --> 00:05:34,860 Hér við köllum fclose og gefa það upprunalega skrá músina okkar. 99 00:05:34,860 --> 00:05:39,500 Í síðari línu, aftur við núll, merkja lok kerfis okkar. 100 00:05:39,500 --> 00:05:42,630 Og, já, hluti þrjú er eins einfalt eins og þessi. 101 00:05:42,630 --> 00:05:45,260 >> Við skulum fara að lesa úr skrá. 102 00:05:45,260 --> 00:05:48,220 Aftur í skrá okkar höfum við skrá sem heitir printer.c. 103 00:05:48,220 --> 00:05:50,910 Við skulum hlaupa með skrá við bjuggum bara - 104 00:05:50,910 --> 00:05:53,350 doc.txt. 105 00:05:53,350 --> 00:05:58,150 Þessi áætlun, eins og nafnið gefur til kynna, mun einfaldlega prenta út innihald skrá framhjá henni. 106 00:05:58,150 --> 00:06:00,230 Og þar sem við höfum það. 107 00:06:00,230 --> 00:06:03,780 The línumaður af kóða við höfðum slegið fyrr og vistuð í doc.txt. 108 00:06:03,780 --> 00:06:06,980 Hæ. Mitt nafn er Jason. 109 00:06:06,980 --> 00:06:09,120 Ef við kafa inn printer.c, 110 00:06:09,120 --> 00:06:13,570 sjáum við að fullt af kóða lítur svipað og við gengum bara í gegnum í typewriter.c. 111 00:06:13,570 --> 00:06:16,720 Reyndar lína 22, þar sem við opnað skrá, 112 00:06:16,720 --> 00:06:19,220 og lína 39, þar sem við lokað skrána, 113 00:06:19,220 --> 00:06:23,890 eru bæði nánast eins typewriter.c, spara fyrir fopen annað rifrildi. 114 00:06:23,890 --> 00:06:26,510 Í þetta sinn erum við að lesa úr skrá, 115 00:06:26,510 --> 00:06:29,040 þannig að við höfum valið r stað w. 116 00:06:29,040 --> 00:06:31,950 Svona, við skulum leggja áherslu á seinni hluta af ferlinu. 117 00:06:31,950 --> 00:06:36,060 Í línu 35, sem annað ástand í 4 lykkju okkar, 118 00:06:36,060 --> 00:06:38,590 við að hringja til fgets, 119 00:06:38,590 --> 00:06:42,190 félagi virka til fputs undan. 120 00:06:42,190 --> 00:06:44,660 Í þetta sinn höfum við þrjú rök. 121 00:06:44,660 --> 00:06:48,810 Í fyrsta lagi er bendi á fylki af stöfum sem verður strengurinn geymd. 122 00:06:48,810 --> 00:06:52,670 Annað er hámarksfjöldi stafa til að lesa. 123 00:06:52,670 --> 00:06:56,010 Og þriðja er bendi á skrá sem við erum að vinna. 124 00:06:56,010 --> 00:07:00,780 Þú munt taka eftir því að til lykkju lýkur þegar fgets skilar null. 125 00:07:00,780 --> 00:07:02,940 Það eru tvær ástæður sem þetta gæti hafa gerst. 126 00:07:02,940 --> 00:07:05,380 First, villa gæti hafa gerst. 127 00:07:05,380 --> 00:07:10,740 Í öðru lagi, og líklegra var endir af the skrá náð og ekki fleiri stafir voru lesnar. 128 00:07:10,740 --> 00:07:14,040 Í tilfelli þú ert að spá í, ekki tvær aðgerðir til að leyfa okkur að segja 129 00:07:14,040 --> 00:07:17,160 sem ástæða er orsök fyrir þessu tiltekna null músina. 130 00:07:17,160 --> 00:07:21,090 Og ekki að undra, þar sem þeir hafa að gera með að vinna með skrár, 131 00:07:21,090 --> 00:07:26,940 bæði ferror virka og feof virka byrja með bókstafnum f. 132 00:07:26,940 --> 00:07:32,130 >> Að lokum, áður en við lokum, einn fljótur huga um lok starfsemi skrá, 133 00:07:32,130 --> 00:07:36,690 sem, eins og bara nefnd, er skrifað sem feof. 134 00:07:36,690 --> 00:07:41,550 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. 135 00:07:41,550 --> 00:07:45,790 Svona, þú þarft leið til að enda þessar lykkjur eftir að þú nærð í lok þessa skrá. 136 00:07:45,790 --> 00:07:50,510 Starf feof á músina skrá og stöðva til sjá ef það er satt 137 00:07:50,510 --> 00:07:52,310 myndi gera einmitt þetta. 138 00:07:52,310 --> 00:07:59,820 Svona, meðan lykkja með ástand (! Feof (FP)) kann að virðast eins og a fullkomlega viðeigandi lausn. 139 00:07:59,820 --> 00:08:03,770 Hins vegar segja að við höfum eina línu eftir í textaskrá okkar. 140 00:08:03,770 --> 00:08:07,130 Við munum slá meðan lykkja okkar og allt vilja vinna út eins og til stóð. 141 00:08:07,130 --> 00:08:12,750 Á næstu umferð með, program okkar vilja athuga hvort feof á FE er satt, 142 00:08:12,750 --> 00:08:15,430 en - og þetta er mikilvægt atriði til að skilja hér - 143 00:08:15,430 --> 00:08:17,770 það mun ekki vera satt bara ennþá. 144 00:08:17,770 --> 00:08:21,110 Það er vegna þess að tilgangur feof er ekki að athuga 145 00:08:21,110 --> 00:08:24,400 ef næsta kalla til að lesa aðgerð vilja högg the endir af the skrá, 146 00:08:24,400 --> 00:08:28,190 heldur til að athuga hvort ekki the endir af the skrá hefur þegar verið náð. 147 00:08:28,190 --> 00:08:30,140 Í tilviki þessu dæmi 148 00:08:30,140 --> 00:08:32,780 lesa síðustu línuna af skrá okkar gengur fullkomlega vel, 149 00:08:32,780 --> 00:08:36,210 en forritið er ekki enn vita að við höfum högg lok skrá okkar. 150 00:08:36,210 --> 00:08:40,549 Það er ekki fyrr en það er einn til viðbótar að lesa að það gegn the endir af the skrá. 151 00:08:40,549 --> 00:08:43,210 Þannig að rétt ástand væri eftirfarandi: 152 00:08:43,210 --> 00:08:49,330 fgets og þrjú rök hennar - framleiðsla, stærð framleiðsla og FP - 153 00:08:49,330 --> 00:08:52,570 og allt sem ekki jafn null. 154 00:08:52,570 --> 00:08:55,260 Þetta er sú leið sem við tók í printer.c, 155 00:08:55,260 --> 00:08:57,890 og í þessu tilfelli, eftir lykkju hættir, 156 00:08:57,890 --> 00:09:04,290 þú gætir hringt feof eða ferror að tilkynna notanda um tiltekna rökstuðnings fyrir spennandi þessa lykkju. 157 00:09:04,290 --> 00:09:08,100 >> Ritun til og lesa úr skrá er í flestum undirstöðu þess, 158 00:09:08,100 --> 00:09:10,150 einfalt 3-hluta aðferð. 159 00:09:10,150 --> 00:09:12,530 Fyrst opnar skrána. 160 00:09:12,530 --> 00:09:16,740 Í öðru lagi leggjum nokkra hluti í skránni okkar eða taka nokkur atriði út af því. 161 00:09:16,740 --> 00:09:19,200 Í þriðja lagi, loka við skrána. 162 00:09:19,200 --> 00:09:21,170 Fyrsta og síðasta hluta er auðvelt. 163 00:09:21,170 --> 00:09:23,920 Miðhluta er þar sem erfiður efni liggur. 164 00:09:23,920 --> 00:09:27,760 Og þó undir hetta við erum alltaf að takast á við langa röð af núllum og sjálfur, 165 00:09:27,760 --> 00:09:30,710 það er hjálp þegar erfðaskrá til að bæta við lag af abstrakt 166 00:09:30,710 --> 00:09:35,350 sem snýr röð í eitthvað sem meira líkist það sem við erum að nota til að sjá. 167 00:09:35,350 --> 00:09:39,570 Til dæmis, ef við erum að vinna með 24-bita punktamynd skrá, 168 00:09:39,570 --> 00:09:43,290 við munum líklega vera að lesa eða skrifa þrjár bæti í einu. 169 00:09:43,290 --> 00:09:46,450 Í því tilviki, myndi það gera vit í að skilgreina og viðeigandi nafn 170 00:09:46,450 --> 00:09:48,980 a struct sem er 3 bæti stór. 171 00:09:48,980 --> 00:09:51,410 >> Þó að vinna með skrár kann að virðast flókið, 172 00:09:51,410 --> 00:09:54,530 nýta þau leyfa okkur að gera eitthvað sannarlega ótrúlegur. 173 00:09:54,530 --> 00:09:58,880 Við getum breytt stöðu í heiminum utan program okkar, 174 00:09:58,880 --> 00:10:01,730 við getum búið til eitthvað sem býr handan við líf kerfi okkar, 175 00:10:01,730 --> 00:10:07,190 eða við getum jafnvel breyta einhverju sem var búið til fyrir áætlun okkar byrjaði að keyra. 176 00:10:07,190 --> 00:10:11,210 Samskipti við skrá er sannarlega öflugur hluti af forritun í C 177 00:10:11,210 --> 00:10:15,300 og ég er spennt að sjá hvað þú ert að fara að búa með henni í kóðann til að koma. 178 00:10:15,300 --> 00:10:19,770 Mitt nafn er Jason Hirschhorn. Þetta er CS50. 179 00:10:19,770 --> 00:10:21,770 [CS50.TV] 180 00:10:21,770 --> 00:10:25,940 >> [Hlátur] 181 00:10:25,940 --> 00:10:29,330 Allt í lagi. Einn að taka. Hér förum. 182 00:10:49,000 --> 00:10:52,140 Þegar við hugsum um skrá - >> Ó, bíddu. Því miður. 183 00:10:52,140 --> 00:10:56,800 [Hlátur] lagi. 184 00:11:06,620 --> 00:11:09,970 Hey þarna. 185 00:11:13,670 --> 00:11:16,310 Þegar við hugsum um skrá - 186 00:11:17,610 --> 00:11:20,710 Þegar þú hugsa um skrá - Allt í lagi. Segðu mér þegar þú ert tilbúin. 187 00:11:20,710 --> 00:11:22,520 Oh, frábært. 188 00:11:22,520 --> 00:11:26,180 Þó að lesa úr teleprompter kann að virðast - nei. Slæmt minn.