1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Ranpli I / O] 2 00:00:02,000 --> 00:00:04,000 [Jason Hirschhorn, Inivèsite Harvard] 3 00:00:04,000 --> 00:00:07,000 [Sa a se CS50, CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Lè nou panse de yon dosye, ki sa ki vini nan lespri se yon dokiman Pawòl Microsoft, 5 00:00:11,000 --> 00:00:14,000 yon JPEG imaj, oswa yon chante MP3, 6 00:00:14,000 --> 00:00:17,000 e nou kominike avèk chak nan sa yo kalite dosye nan fason diferan. 7 00:00:17,000 --> 00:00:20,000 Pou egzanp, nan yon dokiman Pawòl nou ajoute tèks 8 00:00:20,000 --> 00:00:24,000 pandan y ap avèk yon imaj JPEG nou ta ka rekòt soti bor yo oswa rtouch koulè yo. 9 00:00:24,000 --> 00:00:28,000 Men, anba kapo machin lan tout dosye yo nan òdinatè nou yo se pa gen anyen plis 10 00:00:28,000 --> 00:00:31,000 pase yon sekans long nan zewo ak inite. 11 00:00:31,000 --> 00:00:33,000 Li a jiska aplikasyon an espesifik ki reyaji ak dosye a 12 00:00:33,000 --> 00:00:38,000 dwe deside kijan pou travay sou sa a sekans long epi prezante l bay itilizatè a. 13 00:00:38,000 --> 00:00:41,000 Sou yon sèl men, yon dokiman kapab gade nan jis multiple youn, 14 00:00:41,000 --> 00:00:45,000 oswa 8 zewo ak moun yo, epi montre yon karaktè ASCII sou ekran an. 15 00:00:45,000 --> 00:00:48,000 Nan lòt men an, yon imaj bitmap kapab gade nan 3 bytes, 16 00:00:48,000 --> 00:00:50,000 oswa 24 zewo ak moun yo, 17 00:00:50,000 --> 00:00:53,000 ak esplike nou rèv yo kòm 3 nimewo ekzadesimal 18 00:00:53,000 --> 00:00:56,000 ki reprezante valè yo pou wouj, vèt, ak ble 19 00:00:56,000 --> 00:00:58,000 nan yon sèl pixel nan yon imaj. 20 00:00:58,000 --> 00:01:01,000 Kèlkeswa sa yo ka sanble sou ekran ou a, nan nwayo yo, 21 00:01:01,000 --> 00:01:05,000 dosye yo pa gen anyen pi plis pase yon sekans nan zewo ak inite. 22 00:01:05,000 --> 00:01:08,000 Se konsa, nan kite l 'plonje nan ak gade ki jan nou aktyèlman manipile sa yo zewo ak moun yo 23 00:01:08,000 --> 00:01:12,000 lè li rive ekri nan ak lekti ki sòti nan yon dosye. 24 00:01:12,000 --> 00:01:15,000 >> Mwen pral kòmanse pa kraze li desann nan yon pwosesis senp 3-pati. 25 00:01:15,000 --> 00:01:19,000 Next, mwen pral plonje nan de egzanp kòd ki demontre pati sa yo twa. 26 00:01:19,000 --> 00:01:23,000 Finalman, mwen pral revize pwosesis la ak kèk nan detay ki pi enpòtan li yo. 27 00:01:23,000 --> 00:01:25,000 Kòm avèk nenpòt dosye ki chita sou Desktop ou, 28 00:01:25,000 --> 00:01:28,000 premye bagay la fè se louvri li. 29 00:01:28,000 --> 00:01:31,000 Nan C nou fè sa a pa deklare yon konsèy nan yon struct predefini 30 00:01:31,000 --> 00:01:33,000 ki reprezante yon dosye sou ki gen kapasite. 31 00:01:33,000 --> 00:01:38,460 Nan sa a rele fonksyon, nou menm tou nou deside si nou vle yo pou yo ekri oswa li nan dosye a. 32 00:01:38,460 --> 00:01:41,660 Next, nou fè lekti aktyèl la ak ekri. 33 00:01:41,660 --> 00:01:44,800 Genyen yon kantite nan fonksyon espesyalize nou kapab itilize nan pati sa a, 34 00:01:44,800 --> 00:01:48,790 ak preske yo tout kòmanse ak F la lèt, ki vle di pou dosye-a. 35 00:01:48,790 --> 00:01:53,560 Sot pase yo, analogue nan X yo ti kras wouj nan kwen an tèt de dosye yo louvri sou òdinatè ou, 36 00:01:53,560 --> 00:01:56,680 nou fèmen dosye a ak yon apèl nan fonksyon final la. 37 00:01:56,680 --> 00:01:59,540 Kounye a ke nou gen yon ide jeneral de sa n ap pral fè a, 38 00:01:59,540 --> 00:02:02,000 kite a plonje nan kòd la. 39 00:02:02,000 --> 00:02:06,100 >> Nan anyè sa a, nou gen de dosye C ak dosye ki koresponn ègzèkutabl yo. 40 00:02:06,100 --> 00:02:09,710 Pwogram nan typewriter pran youn agiman liy lòd, 41 00:02:09,710 --> 00:02:12,060 non an nan dokiman an nou vle kreye. 42 00:02:12,060 --> 00:02:16,160 Nan ka sa a, nou pral rele li doc.txt. 43 00:02:16,160 --> 00:02:19,080 Se pou nou kouri pwogram nan epi antre nan yon koup nan liy yo. 44 00:02:19,080 --> 00:02:23,660 Hi. Non mwen se Jason. 45 00:02:23,660 --> 00:02:26,710 Finalman, nou pral tape "kite." 46 00:02:26,710 --> 00:02:29,720 Si nou kounye a gen lis tout dosye yo nan anyè sa a, 47 00:02:29,720 --> 00:02:33,770 nou wè ki egziste yon nouvo dokiman yo rele doc.txt. 48 00:02:34,190 --> 00:02:36,110 Sa a se dosye a pwogram sa a jis te kreye. 49 00:02:36,110 --> 00:02:40,520 Ak nan kou, li tou se pa gen anyen plis pase yon sekans long nan zewo ak inite. 50 00:02:41,100 --> 00:02:43,260 Si nou louvri sa a ranpli nouvo, 51 00:02:43,260 --> 00:02:45,870 nou wè liy ki 3 nan kòd nou te antre nan gwo pwogram nou an - 52 00:02:46,060 --> 00:02:49,060 Hi. Me non se Jason. 53 00:02:49,580 --> 00:02:52,090 Men, sa ki aktyèlman pral sou lè typewriter.c kouri? 54 00:02:52,810 --> 00:02:55,520 Liy nan premye nan enterè pou nou se liy 24. 55 00:02:55,560 --> 00:02:58,490 Nan liy sa a, nou deklare konsèy dosye nou yo. 56 00:02:59,080 --> 00:03:03,140 Fonksyon an ki retounen sa a konsèy, fopen, li pran de prèv. 57 00:03:03,140 --> 00:03:07,440 Premye a se non an dosye ki gen ladan ekstansyon an dosye si sa apwopriye. 58 00:03:07,440 --> 00:03:10,980 Sonje byen, yon ekstansyon dosye pa enfliyanse dosye a nan pi ba nivo li yo. 59 00:03:10,980 --> 00:03:14,640 Nou toujou ap fè fas ak yon sekans long nan zewo ak inite. 60 00:03:14,640 --> 00:03:19,630 Men, li fè sa enfliyans ki jan dosye yo entèprete yo ak aplikasyon pou sa ki yo te itilize yo louvri yo. 61 00:03:19,630 --> 00:03:22,290 Agiman Dezyèm fwa w fopen se yon lèt yon sèl 62 00:03:22,290 --> 00:03:25,300 ki vle di pou ki sa nou planifye fè apre nou fin louvri dosye a. 63 00:03:25,300 --> 00:03:30,630 Gen twa opsyon pou sa a agiman - W, R, ak A. 64 00:03:30,630 --> 00:03:34,900 Nou te chwazi w nan ka sa a paske nou vle yo pou yo ekri dosye a. 65 00:03:34,900 --> 00:03:38,820 R, kòm ou ka pwobableman devine, se pou lekti nan dosye a. 66 00:03:38,820 --> 00:03:41,760 Ak yon se pou ajou nan dosye a. 67 00:03:41,760 --> 00:03:44,960 Pandan ke tou de w ak yon kapab itilize pou ekri nan dosye, 68 00:03:44,960 --> 00:03:47,460 w ap kòmanse ekri depi nan konmansman an nan dosye a 69 00:03:47,460 --> 00:03:50,810 ak genyen potansyèl pou recouvrir nenpòt done sa yo ki te deja ki estoke. 70 00:03:50,810 --> 00:03:54,070 Pa default, dosye a nou louvri, si li pa deja egziste, 71 00:03:54,070 --> 00:03:57,180 se ki te kreye nan anyè prezan nou an ap travay. 72 00:03:57,180 --> 00:04:00,540 Sepandan, si nou vle gen aksè a oubyen kreye yon dosye nan yon kote diferan, 73 00:04:00,540 --> 00:04:02,650 nan agiman an premye nan fopen, 74 00:04:02,650 --> 00:04:05,840 nou ka presize yon chemen dosye nan adisyon a non an dosye-a. 75 00:04:05,840 --> 00:04:09,490 Pandan ke premye pati nan pwosesis sa a se sèlman yon liy nan kòd long, 76 00:04:09,490 --> 00:04:12,350 li toujou bon pratik gen ladan yon lòt seri liy 77 00:04:12,350 --> 00:04:15,930 ki tcheke asire ke dosye a te avèk siksè louvri oswa kreye. 78 00:04:15,930 --> 00:04:20,300 Si fopen retounen nil, nou pa ta vle fòje devan ak pwogram nou an, 79 00:04:20,300 --> 00:04:23,270 ak sa a ka rive si sistèm nan fonksyone se soti nan memwa 80 00:04:23,270 --> 00:04:27,940 oswa si nou eseye louvri yon dosye nan yon anyè pou ki nou pa t 'gen otorizasyon apwopriye yo. 81 00:04:27,940 --> 00:04:31,780 >> Pati de nan pwosesis la pwan plas nan riban pandan y ap typewriter a. 82 00:04:31,780 --> 00:04:35,000 Nou itilize yon fonksyon bibliyotèk CS50 jwenn enfòmasyon nan men gwoup itilizatè a yo, 83 00:04:35,000 --> 00:04:37,190 epi ki pran idantite yo pa vle kite pwogram nan, 84 00:04:37,190 --> 00:04:41,940 nou itilize fputs yo fonksyon yo pran fisèl la epi ekri li nan dosye a. 85 00:04:41,940 --> 00:04:46,700 fputs se sèlman youn nan fonksyon sa yo anpil nou te ka sèvi ak yo pou yo ekri dosye a. 86 00:04:46,700 --> 00:04:51,920 Gen lòt ki gen ladan yo fwrite, fputc, e menm fprintf. 87 00:04:51,920 --> 00:04:54,840 Kèlkeswa fonksyon an patikilye nou fini lè l sèvi avèk, menm si, 88 00:04:54,840 --> 00:04:57,480 tout nan yo bezwen konnen, via agiman yo, 89 00:04:57,480 --> 00:04:59,670 omwen de bagay - 90 00:04:59,670 --> 00:05:03,140 sa ki bezwen yo dwe ekri e ki kote li bezwen yo dwe ekri nan. 91 00:05:03,140 --> 00:05:07,240 Nan ka nou an, D 'se fisèl la ki bezwen yo dwe ekri 92 00:05:07,240 --> 00:05:11,290 ak Fp se konsèy la ki dirije nou kote n ap ekri. 93 00:05:11,290 --> 00:05:15,330 Nan pwogram sa a, pati de nan pwosesis la se pito senp. 94 00:05:15,330 --> 00:05:17,360 Nou ap tou senpleman pran yon kòd nan itilizatè a 95 00:05:17,360 --> 00:05:22,120 epi ajoute li dirèkteman nan dosye nou yo avèk ti kras-a-pa gen okenn validation opinyon oswa chèk sekirite. 96 00:05:22,120 --> 00:05:26,160 Souvan, sepandan, pati de pral pran èstime nan kòd ou a. 97 00:05:26,160 --> 00:05:30,580 Finalman, yon pati twa se sou liy 58, kote nou fèmen dosye a. 98 00:05:30,580 --> 00:05:34,860 Isit la nou rele fkloz epi pase li konsèy orijinal dosye nou yo. 99 00:05:34,860 --> 00:05:39,500 Nan liy lan ki vin apre a, nou tounen zewo, siyal nan fen pwogram nou an. 100 00:05:39,500 --> 00:05:42,630 Epi, se wi, pati twa se kòm senp tankou sa. 101 00:05:42,630 --> 00:05:45,260 >> Se pou yo deplase sou li nan dosye. 102 00:05:45,260 --> 00:05:48,220 Retounen nan lis nou an, nou gen yon dosye rele printer.c. 103 00:05:48,220 --> 00:05:50,910 Se pou nou kouri l 'ak dosye a nou jis te kreye - 104 00:05:50,910 --> 00:05:53,350 doc.txt. 105 00:05:53,350 --> 00:05:58,150 Pwogram sa a, kòm non an sijere, yo pral tou senpleman enprime soti sa ki nan dosye a te pase li. 106 00:05:58,150 --> 00:06:00,230 Se la nou genyen li. 107 00:06:00,230 --> 00:06:03,780 Liy sa yo nan Kòd nou te tape pi bonè ak sove nan doc.txt. 108 00:06:03,780 --> 00:06:06,980 Hi. Non mwen se Jason. 109 00:06:06,980 --> 00:06:09,120 Si nou plonje nan printer.c, 110 00:06:09,120 --> 00:06:13,570 nou wè ke yon anpil nan kòd la sanble menm jan ak sa nou jis te mache nan tout nan typewriter.c. 111 00:06:13,570 --> 00:06:16,720 Vreman vre, yo liy 22 kote nou louvri dosye a, 112 00:06:16,720 --> 00:06:19,220 ak 39 liy, kote nou fèmen dosye a, 113 00:06:19,220 --> 00:06:23,890 tou de se prèske ki idantik ak typewriter.c, sove pou agiman fopen dezyèm fwa. 114 00:06:23,890 --> 00:06:26,510 Fwa sa a, nou ap li ki sòti nan yon dosye li an, 115 00:06:26,510 --> 00:06:29,040 pou nou te chwazi r olye pou yo w. 116 00:06:29,040 --> 00:06:31,950 Kidonk, kite a konsantre sou dezyèm pati a nan pwosesis la. 117 00:06:31,950 --> 00:06:36,060 Nan liy 35, kòm kondisyon an dezyèm nan 4 riban nou an, 118 00:06:36,060 --> 00:06:38,590 nou fè yon apèl fje, 119 00:06:38,590 --> 00:06:42,190 konpayon fonksyon nan fputs soti nan anvan. 120 00:06:42,190 --> 00:06:44,660 Fwa sa a, nou gen twa agiman. 121 00:06:44,660 --> 00:06:48,810 Premye a se konsèy nan etalaj la nan karaktè ki kote yo pral fisèl la dwe estoke. 122 00:06:48,810 --> 00:06:52,670 Dezyèm la se la pou maksimòm kantite karaktè ou dwe li. 123 00:06:52,670 --> 00:06:56,010 Ak twazyèm lan se konsèy nan dosye a ak ki nou ap travay. 124 00:06:56,010 --> 00:07:00,780 Ou ap remake ke pou riban fini an lè fje retounen nil. 125 00:07:00,780 --> 00:07:02,940 Gen de rezon ki fè sa a ka te rive. 126 00:07:02,940 --> 00:07:05,380 Premyèman, ka yon erè te fèt. 127 00:07:05,380 --> 00:07:10,740 Dezyèmman, ak plis chans, yo te nan fen dosye a rive jwenn e pa gen plis karaktè yo te li a. 128 00:07:10,740 --> 00:07:14,040 Nan ka w ap mande, de fonksyon egziste ki pèmèt nou di 129 00:07:14,040 --> 00:07:17,160 ki rezon ki fè se kòz la pou sa a konsèy nil an patikilye. 130 00:07:17,160 --> 00:07:21,090 Epi, pa surprenante, depi yo gen fè ak travay ak dosye, 131 00:07:21,090 --> 00:07:26,940 tou de fonksyon an ferror ak nan kòmansman an fonksyon feof ak f nan lèt yo. 132 00:07:26,940 --> 00:07:32,130 >> Finalman, anvan nou fini, yon sèl rapid nòt sou fen a nan fonksyon ranpli, 133 00:07:32,130 --> 00:07:36,690 ki, kòm jis mansyone, ki ekri nan Liv kòm feof. 134 00:07:36,690 --> 00:07:41,550 Souvan w ap jwenn tèt ou lè l sèvi avèk tan, e pou pasan progresivman li fason ou nan dosye. 135 00:07:41,550 --> 00:07:45,790 Kidonk, ou pral bezwen yon fason nan fen sa yo pasan apre ou fin rive nan fen an nan fichye sa yo. 136 00:07:45,790 --> 00:07:50,510 Rele feof sou konsèy dosye ou epi tcheke yo wè si se vre 137 00:07:50,510 --> 00:07:52,310 ta jis fè sa. 138 00:07:52,310 --> 00:07:59,820 Kidonk, yon riban pandan y ap avèk kondisyon an (! Feof (Fp)) ta ka sanble tankou yon solisyon parfe ki apwopriye yo. 139 00:07:59,820 --> 00:08:03,770 Sepandan, di nou gen yon sèl liy kite nan dosye tèks nou an. 140 00:08:03,770 --> 00:08:07,130 Nou pral antre nan riban pandan y ap nou yo ak tout bagay ap travay deyò tankou te planifye a. 141 00:08:07,130 --> 00:08:12,750 Sou nan pwochen tou nan, pwogram nou an pral tcheke pou wè yo wè si feof nan Fp se vre, 142 00:08:12,750 --> 00:08:15,430 men - ak sa a se pwen an enpòtan yo konprann isit la - 143 00:08:15,430 --> 00:08:17,770 li pa pral vre jis ankò. 144 00:08:17,770 --> 00:08:21,110 Sa a se paske bi pou yo feof se pa yo tcheke 145 00:08:21,110 --> 00:08:24,400 si apèl la pwochen nan yon fonksyon li pral frape nan fen dosye a, 146 00:08:24,400 --> 00:08:28,190 men pito yo tcheke si ou pa te fen a nan dosye a yo te deja rive jwenn. 147 00:08:28,190 --> 00:08:30,140 Nan ka sa a egzanp, 148 00:08:30,140 --> 00:08:32,780 lekti liy ki sot pase a nan dosye nou an ale parfe san pwoblèm, 149 00:08:32,780 --> 00:08:36,210 men pwogram nan pa wè jan nou te frape nan fen dosye nou yo. 150 00:08:36,210 --> 00:08:40,549 Li pa jouk li fè sa yon sèl Read adisyonèl ke li kontè fen a nan dosye a. 151 00:08:40,549 --> 00:08:43,210 Kidonk, yon kondisyon ki kòrèk ta dwe bagay sa yo: 152 00:08:43,210 --> 00:08:49,330 fje ak agiman twa li yo - randman, gwosè nan pwodiksyon, ak Fp - 153 00:08:49,330 --> 00:08:52,570 ak nan tout sa egal pa nil. 154 00:08:52,570 --> 00:08:55,260 Sa a se apwòch la nou te pran nan printer.c, 155 00:08:55,260 --> 00:08:57,890 ak nan ka sa a, apre yo fin sòti nan riban, 156 00:08:57,890 --> 00:09:04,290 ou ta ka rele feof oswa ferror enfòme itilizatè a kòm rezònman an espesifik pou sòti sa a riban. 157 00:09:04,290 --> 00:09:08,100 >> Ekri pou ale ak pou lekti ki sòti nan yon dosye se, nan ki pi fondamantal li yo, 158 00:09:08,100 --> 00:09:10,150 yon senp 3-pati pwosesis la. 159 00:09:10,150 --> 00:09:12,530 Premyèman, nou louvri dosye a. 160 00:09:12,530 --> 00:09:16,740 Dezyèmman, nou mete kèk bagay nan dosye nou an oswa pran kèk bagay soti nan li. 161 00:09:16,740 --> 00:09:19,200 Twazyèmman, nou fèmen dosye a. 162 00:09:19,200 --> 00:09:21,170 Pati pyès sa yo premye ak dènye yo fasil. 163 00:09:21,170 --> 00:09:23,920 Pati nan mitan an se kote bagay la difisil manti. 164 00:09:23,920 --> 00:09:27,760 Epi menm si anba kapo a nou toujou ap fè fas ak yon sekans long nan zewo ak moun yo, 165 00:09:27,760 --> 00:09:30,710 li ede lè kodaj yo ajoute yon kouch abstraction 166 00:09:30,710 --> 00:09:35,350 ki vin sekans lan nan yon bagay ki sanble pi plis ak sa n ap itilize yo wè. 167 00:09:35,350 --> 00:09:39,570 Pou egzanp, si nou ap travay ak yon dosye bitmap 24-ti jan, 168 00:09:39,570 --> 00:09:43,290 nou pral posib pou li, oswa ekri twa bytes nan yon tan. 169 00:09:43,290 --> 00:09:46,450 Nan ka sa a, li ta fè sans nan defini ak kòmsadwa non 170 00:09:46,450 --> 00:09:48,980 yon struct ki se 3 bytes gwo. 171 00:09:48,980 --> 00:09:51,410 >> Menm si travay ak dosye ki ka sanble yo konplike, 172 00:09:51,410 --> 00:09:54,530 itilize yo pèmèt nou fè yon bagay vrèman remakab. 173 00:09:54,530 --> 00:09:58,880 Nou ka chanje eta a nan mond lan deyò pwogram nou an, 174 00:09:58,880 --> 00:10:01,730 nou kapab kreye yon bagay ki ap viv pi lwen pase lavi sa a ki nan pwogram nou an, 175 00:10:01,730 --> 00:10:07,190 oubyen nou ka menm chanje yon bagay ki te kreye anvan pwogram nou an te kòmanse kouri. 176 00:10:07,190 --> 00:10:11,210 Kominikasyon avèk dosye se yon pati vrèman pwisan nan pwogram nan C. 177 00:10:11,210 --> 00:10:15,300 ak mwen eksite yo wè sa ki w ap ale nan kreye ak li nan kòd la ap vini yo. 178 00:10:15,300 --> 00:10:19,770 Non mwen se Jason Hirschhorn. Sa a se CS50. 179 00:10:19,770 --> 00:10:21,770 [CS50.TV] 180 00:10:21,770 --> 00:10:25,940 >> [Rir] 181 00:10:25,940 --> 00:10:29,330 Oke. Youn nan pran. Isit la nou ale. 182 00:10:49,000 --> 00:10:52,140 Lè nou panse de yon dosye - >> Oh, rete tann. Sorry. 183 00:10:52,140 --> 00:10:56,800 [Rir] Okay. 184 00:11:06,620 --> 00:11:09,970 Hey la. 185 00:11:13,670 --> 00:11:16,310 Lè nou panse de yon dosye - 186 00:11:17,610 --> 00:11:20,710 Lè ou panse a yon dosye - Okay. Di m 'lè w ap pare. 187 00:11:20,710 --> 00:11:22,520 Oh, gwo. 188 00:11:22,520 --> 00:11:26,180 Menm si li soti nan yon teleprompter ki ka sanble yo - pa gen okenn. Move m 'yo.