1 00:00:00,000 --> 00:00:09,780 >> [MUSIC Playing] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA CHAN: Le të trajtuar të shërohen. 3 00:00:11,150 --> 00:00:14,030 Recover është ndoshta PSET im i preferuar, dhe kryesisht për shkak se unë mendoj se është e 4 00:00:14,030 --> 00:00:15,650 me të vërtetë, me të vërtetë cool. 5 00:00:15,650 --> 00:00:19,040 Në thelb, ju jeni duke i dhënë një kujtim kartë fotografi në të cilat 6 00:00:19,040 --> 00:00:20,900 fotografi janë fshirë. 7 00:00:20,900 --> 00:00:23,650 Por ajo që ju jeni do të bëni është të shërohen ato të gjitha. 8 00:00:23,650 --> 00:00:24,250 >> OK. 9 00:00:24,250 --> 00:00:28,230 Pra, është me të vërtetë emocionuese, por ndoshta një pak frikësuese, sepse ju jeni 10 00:00:28,230 --> 00:00:32,430 dhënë një skedar bosh C dhe ju duhet të plotësoni atë in 11 00:00:32,430 --> 00:00:36,250 OK, kështu që le të thyejnë këtë në pjesë të menaxhueshme. 12 00:00:36,250 --> 00:00:38,160 Ju do të dëshironi të hapur kartën e kujtesës fotografi. 13 00:00:38,160 --> 00:00:39,900 Kjo duket mjaft e thjeshtë. 14 00:00:39,900 --> 00:00:43,030 Pastaj, gjeni fillimin i një imazh JPG. 15 00:00:43,030 --> 00:00:46,740 Të gjitha fotografi në këtë kujtim kartë do të jetë JPGs. 16 00:00:46,740 --> 00:00:50,840 Pastaj, sapo ju të gjeni fillimin, ju do të jeni për të hapur një JPG të re, që 17 00:00:50,840 --> 00:00:57,610 është, si, të krijojë një JPG, dhe të shkruani 512 bajt në një kohë deri në një JPG i ri është 18 00:00:57,610 --> 00:01:02,930 gjetur, dhe dhënien fund të programit, një herë ju zbuluar në fund të file. 19 00:01:02,930 --> 00:01:06,400 >> Pra hapat e para të parë është për të hapur fotografi kartën e kujtesës. 20 00:01:06,400 --> 00:01:09,850 Por ju e dini këtë tashmë, dhe nuk ka një file I / O funksion që do të 21 00:01:09,850 --> 00:01:12,030 provojë shumë i dobishëm. 22 00:01:12,030 --> 00:01:12,820 OK. 23 00:01:12,820 --> 00:01:14,760 Pra cilat janë JPGs? 24 00:01:14,760 --> 00:01:16,330 Sepse ne kemi nevojë për të në fillim atë. 25 00:01:16,330 --> 00:01:21,310 E pra, JPGs, ashtu si harta bit, janë vetëm sekuenca të bytes. 26 00:01:21,310 --> 00:01:30,660 Për fat të mirë, çdo JPG fillon me ose 0xff, 0xd8, 0xff, 0xe0, e rend 27 00:01:30,660 --> 00:01:33,610 e bytes, ose një tjetër sekuencë e bytes. 28 00:01:33,610 --> 00:01:37,250 >> Pra, këto katër bytes tregojnë fillimi i një JPG. 29 00:01:37,250 --> 00:01:40,780 Askush tjetër përveç këtyre dy kombinime e katër bytes. 30 00:01:40,780 --> 00:01:44,840 Dhe për fat të mirë për ne, një tjetër fakt që ne mund të përfitojnë nga është se çdo 31 00:01:44,840 --> 00:01:48,550 JPG është ruajtur krah për krah në kartën e kujtesës. 32 00:01:48,550 --> 00:01:52,210 Unë e kam përfaqësuar strukturën e një kartën e kujtesës në mënyrë skematike në këtë 33 00:01:52,210 --> 00:01:53,310 rrëshqitje këtu. 34 00:01:53,310 --> 00:01:59,270 Këtu, çdo katror, ​​çdo drejtkëndësh, përfaqëson 512 bytes, dhe ajo fillon 35 00:01:59,270 --> 00:02:01,750 me një gri në se ne nuk bëjmë me të vërtetë kanë një JPG. 36 00:02:01,750 --> 00:02:05,700 >> Por pastaj ne fund goditi një bllok me një yll. 37 00:02:05,700 --> 00:02:10,940 Kjo do të thotë se katër bytes e para nga nga ata 512 janë një nga ato dy 38 00:02:10,940 --> 00:02:13,230 duke filluar sekuenca e një JPG. 39 00:02:13,230 --> 00:02:17,340 Dhe ne do të shkojmë nga atje, dhe pastaj një herë një JPG përfundon, një tjetër fillon. 40 00:02:17,340 --> 00:02:20,990 Ne kurrë nuk kanë asnjë më shumë hapësirë ​​gri në mes. 41 00:02:20,990 --> 00:02:25,550 >> Por si nuk kemi të vërtetë lexuar këtë, dhe lexoni 512 bytes në mënyrë që ne mund të bëjë 42 00:02:25,550 --> 00:02:27,500 krahasimi vendin e parë? 43 00:02:27,500 --> 00:02:33,470 E pra, le të kthehemi në fread, të cilat merr në struct që do të përmbajë të 44 00:02:33,470 --> 00:02:34,470 e bytes që ju jeni duke lexuar. 45 00:02:34,470 --> 00:02:36,570 Pra, ju jeni duke shkuar për të vënë ata në atje - 46 00:02:36,570 --> 00:02:42,192 madhësia, numri, dhe pastaj inpointer që ju jeni duke lexuar nga. 47 00:02:42,192 --> 00:02:49,900 Tani, ne duam të lexojnë 512 në një kohë, dhe ne duam të ruajtur këtë në një tampon, 48 00:02:49,900 --> 00:02:50,700 Unë jam duke shkuar për të thirrur atë. 49 00:02:50,700 --> 00:02:54,100 >> Në thelb, ne jemi duke shkuar për të mbajtur mbi ato 512 bytes dhe të bëjë 50 00:02:54,100 --> 00:02:55,500 gjërat me atë, e drejtë? 51 00:02:55,500 --> 00:02:58,260 Ne jemi ose do të të krahasuar parë katër bytes, ose ne do të 52 00:02:58,260 --> 00:02:59,830 lexuar atë në, OK? 53 00:02:59,830 --> 00:03:05,050 Pra, atëherë të dhënat akrep do pas shërbejnë si tampon tuaj, dhe 54 00:03:05,050 --> 00:03:07,745 inpointer, mirë, kjo është vetëm do të jetë kartën tuaj të kujtesës. 55 00:03:07,745 --> 00:03:09,500 >> Mbrapsht në kartën e kujtesës tonë skemën. 56 00:03:09,500 --> 00:03:14,690 Ne jemi duke shkuar për të lexuar 512 bytes në një kohë, magazinimin e çdo bllok 512-byte 57 00:03:14,690 --> 00:03:19,190 në një tampon, mbajnë mbi ata tampon, ato 512 bytes, deri sa ne e dimë 58 00:03:19,190 --> 00:03:22,000 saktësisht se çfarë për të bërë ato. 59 00:03:22,000 --> 00:03:25,960 Pra, në fillim nuk është ndonjë gjë, kështu që ne do të lexoni tampon, krahasojnë atë, dhe 60 00:03:25,960 --> 00:03:28,160 ne nuk do të duhet të bëjë asgjë me të. 61 00:03:28,160 --> 00:03:32,030 Dhe pastaj, ne fund goditi një yll të bllokuar, do të thotë se ne kemi 62 00:03:32,030 --> 00:03:33,630 gjetur JPG tonë të parë. 63 00:03:33,630 --> 00:03:36,560 Deri tani tampon mbajë bytes nga ajo JPG. 64 00:03:36,560 --> 00:03:40,220 >> Herën tjetër 512 bytes, sepse ata janë jo një bllok yll, janë gjithashtu 65 00:03:40,220 --> 00:03:41,740 pjesë e atij JPG. 66 00:03:41,740 --> 00:03:47,630 Dhe JPGs janë të vazhdueshme nga atje më në, deri sa ne goditi JPG ardhshëm. 67 00:03:47,630 --> 00:03:51,880 Dhe pastaj tampon pastaj mban 512 bytes për atë JPG, dhe 68 00:03:51,880 --> 00:03:53,580 kështu me radhë, e kështu me radhë. 69 00:03:53,580 --> 00:03:54,250 OK. 70 00:03:54,250 --> 00:03:58,980 >> Pra, një herë ju goditi i pari i stolisur me yje bllok, JPG pari, si ju 71 00:03:58,980 --> 00:04:01,910 në fakt, mirë, të hapur atë? 72 00:04:01,910 --> 00:04:04,990 Le të bëjë një JPG re. 73 00:04:04,990 --> 00:04:08,846 Filenames për një JPG do të të jetë në formatin, numri, numri, 74 00:04:08,846 --> 00:04:13,830 number.jpg, në se ata janë emëruar në mënyrë në të cilën ata janë gjetur, 75 00:04:13,830 --> 00:04:14,780 duke filluar në 0. 76 00:04:14,780 --> 00:04:19,890 >> Pra JPG parë që ju gjeni do të 000.jpg. 77 00:04:19,890 --> 00:04:26,560 Pra, ndoshta një ide e mirë për të mbajtur nën e sa JPGs keni gjetur deri tani. 78 00:04:26,560 --> 00:04:27,610 Pra, kjo është emrin e file. 79 00:04:27,610 --> 00:04:29,660 Por si mund të bëjë në fakt atë? 80 00:04:29,660 --> 00:04:34,310 E pra, ne do të përdorë funksion të quajtur sprintf. 81 00:04:34,310 --> 00:04:38,260 A pak e ngjashme me printf, ku ju mund të përdorni placeholders për vargjet, 82 00:04:38,260 --> 00:04:42,420 përjashtim në këtë rast, sprintf do të shtypura dosja jashtë në tanishme 83 00:04:42,420 --> 00:04:45,550 directory, jo në terminal. 84 00:04:45,550 --> 00:04:46,120 >> OK. 85 00:04:46,120 --> 00:04:49,950 Pra, këtu ne shohim se ne kemi titullin, një koleksion char që do të ruajë 86 00:04:49,950 --> 00:04:55,120 string rezultante, dhe ne të kalojë në Titulli i vargut aktuale me një 87 00:04:55,120 --> 00:04:58,720 placeholder, ashtu si e kemi mësuar të bëjë me printf. 88 00:04:58,720 --> 00:05:05,530 Por kjo kodin që kam këtu do të japë 2.jpg, jo 002.jpg. 89 00:05:05,530 --> 00:05:09,920 Kështu që unë do të iki nga ju për të gjetur se si për të modifikojë kete vend për të bërë 90 00:05:09,920 --> 00:05:11,920 Emri i saktë. 91 00:05:11,920 --> 00:05:12,610 >> OK. 92 00:05:12,610 --> 00:05:17,390 Pra, një herë ju keni sprintf'd atëherë ju mund të të hapur këtë dosje, sepse ajo ekziston në 93 00:05:17,390 --> 00:05:22,690 directory tuaj, me fopen, duke përdorur titullin, dhe më pas çdo gjë mënyra të doni 94 00:05:22,690 --> 00:05:25,140 për të hapur këtë dosje in 95 00:05:25,140 --> 00:05:30,260 Pra, tani që ne kemi hapur një skedë të re JPG, tani ne mund të shkruaj 512 bytes në një 96 00:05:30,260 --> 00:05:33,320 kohë, deri sa një JPG re është gjetur. 97 00:05:33,320 --> 00:05:36,640 Pra, le të marrë një sy në sintaksë e fwrite. 98 00:05:36,640 --> 00:05:40,060 >> Unë e di që unë jam duke treguar këtë rrëshqitje a shumë, por unë vetëm dua të sigurohemi që 99 00:05:40,060 --> 00:05:43,530 ju djema nuk e merrni shumë të hutuar, sepse Unë e di se është shumë e lehtë për të 100 00:05:43,530 --> 00:05:47,000 përzierje deri pari dhe i fundit argumenti, në mënyrë të veçantë. 101 00:05:47,000 --> 00:05:54,390 Por mos harroni se ju jeni me shkrim nga tampon tuaj në imazhet jashtë file. 102 00:05:54,390 --> 00:05:59,250 >> Tani që ju e dini se si shkruaj 512 bytes në dosjen tuaj JPG që e keni 103 00:05:59,250 --> 00:06:03,230 krijuar, mirë, ne duam të ndaluar që Procesi herë ne kemi arritur në fund të 104 00:06:03,230 --> 00:06:06,720 kartë tonë, sepse nuk do të ketë çdo imazhe më shumë për të gjetur. 105 00:06:06,720 --> 00:06:10,760 Pra, le të kthehemi në fread edhe një herë, unë premtoj. 106 00:06:10,760 --> 00:06:15,600 fread kthehet si artikuj shumë të madhësisë, madhësia, ishin të gatshme në sukses. 107 00:06:15,600 --> 00:06:19,440 Në mënyrë ideale, kjo do të jetë çdo gjë ju të kalojë në për numër, apo jo? 108 00:06:19,440 --> 00:06:24,140 Sepse ju jeni duke u përpjekur për të lexuar numrin e elementeve të madhësisë, madhësisë. 109 00:06:24,140 --> 00:06:29,380 Por nëse fread nuk është në gjendje për të lexuar se Numri i elementeve, atëherë ajo do të kthehet 110 00:06:29,380 --> 00:06:32,530 çfarëdo numri është lexuar me sukses. 111 00:06:32,530 --> 00:06:36,310 >> Tani, një gjë e rëndësishme të theksohet është se në qoftë se ju përdorni një skedar I / O 112 00:06:36,310 --> 00:06:43,860 funksion si fgetc, ajo do të kthehet se sa çështje është lexuar me sukses. 113 00:06:43,860 --> 00:06:48,000 Çfarë është e dobishme në lidhje me këtë funksion është se në qoftë se ju përdorni funksionet në brendësi të një 114 00:06:48,000 --> 00:06:53,190 kusht, ajo do të kryej vetë, ndërsa përcaktimin atë kusht që është 115 00:06:53,190 --> 00:06:54,340 vetëm të vërtetë të dobishme. 116 00:06:54,340 --> 00:07:00,440 Pra, nëse ju e keni këtë kushte, të themi, nëse tampon fread, DOG sizeof, 2, 117 00:07:00,440 --> 00:07:04,870 akrep, e barabartë është e barabartë me 1, që do të thotë se unë do të doja të lexuar 118 00:07:04,870 --> 00:07:06,540 2 qentë në atë kohë. 119 00:07:06,540 --> 00:07:13,490 Por në qoftë se fread kthehet me 1 vend të 2 si Pritet, që do të thotë se ka 2 120 00:07:13,490 --> 00:07:16,480 qentë lënë në dosjen time, por më tepër 1. 121 00:07:16,480 --> 00:07:22,450 Por në qoftë se ajo kthehet 2, atëherë unë ende kanë ato 2 qentë brenda e tampon tim. 122 00:07:22,450 --> 00:07:26,280 >> Pra, tani që ju jep një kuptim të asaj se si për të shikoni për në fund të skedarit, por 123 00:07:26,280 --> 00:07:28,940 le të kalojnë nëpër tani logjikën. 124 00:07:28,940 --> 00:07:32,460 Si nuk kemi të vërtetë të kuptuar të gjithë nga këto elemente së bashku? 125 00:07:32,460 --> 00:07:36,880 Pasi të kemi goditur JPG tonë të parë, që nga ne e dimë se JPGs janë ruajtur 126 00:07:36,880 --> 00:07:40,910 pranë njëri tjetrit, ne do të jetë me shkrim deri kemi arritur në fund të dosjen e tyre. 127 00:07:40,910 --> 00:07:43,950 Por ne nuk duam të shkruani çdo gjë deri atëherë. 128 00:07:43,950 --> 00:07:48,710 Pra kjo çështje, jo vetëm që ne jemi në fillimi i një JPG të re, por nëse 129 00:07:48,710 --> 00:07:50,655 ne kemi gjetur tashmë një JPG ose jo. 130 00:07:50,655 --> 00:07:55,390 >> Nëse Është fillimi i një JPG të re, ne do të duan për të mbyllur dosjen tonë të tanishëm JPG nëse 131 00:07:55,390 --> 00:07:59,110 ne kemi një të hapur, dhe të hapur një e re për të shkruar në. 132 00:07:59,110 --> 00:08:03,340 Nëse nuk është fillimi i JPG ri, edhe pse, ne do të vazhdojmë të njëjtën kartelë JPG 133 00:08:03,340 --> 00:08:05,910 të hapur dhe të shkruani në këtë. 134 00:08:05,910 --> 00:08:10,100 Ne do të shkruaj tampon tonë në cilado JPG fotografi ne kemi hapur, me kusht që 135 00:08:10,100 --> 00:08:12,120 ne kemi një Open, natyrisht. 136 00:08:12,120 --> 00:08:16,190 Në qoftë se ne nuk kemi gjetur JPG tonë të parë por, ne nuk shkruaj asgjë. 137 00:08:16,190 --> 00:08:20,290 Dhe ky proces vazhdon deri sa ju arrijë në fund të dosjen e tyre. 138 00:08:20,290 --> 00:08:23,410 >> Dhe së fundi, ju do të dëshironi të bëni të sigurtë që ju fclose ndonjë 139 00:08:23,410 --> 00:08:25,800 fotografi që ju keni fopened. 140 00:08:25,800 --> 00:08:28,360 Pasi të jeni të kënaqur me konceptet, të marrë një vështrim në disa 141 00:08:28,360 --> 00:08:30,840 pseudokod, të cilën unë kam përfshirë këtu. 142 00:08:30,840 --> 00:08:34,830 Së pari, ju doni të hapur dosjen e kartës, dhe pastaj të përsëritur procesin e mëposhtëm 143 00:08:34,830 --> 00:08:37,144 deri sa të keni arritur fundi i kartës. 144 00:08:37,144 --> 00:08:40,880 Ju dëshironi të lexoni 512 bytes në një buffer. 145 00:08:40,880 --> 00:08:43,934 Duke përdorur këtë tampon, ju do të dëshironi të kontrolloni nëse ju jeni në fillim të një 146 00:08:43,934 --> 00:08:45,300 JPG re apo jo. 147 00:08:45,300 --> 00:08:48,400 Dhe përgjigja e kësaj pyetje do të ndikojë në menaxhimin e skedarëve - 148 00:08:48,400 --> 00:08:51,940 cilën fotografi ju hapur, të cilat ato ju mbyllni. 149 00:08:51,940 --> 00:08:55,220 >> Pastaj, a keni gjetur tashmë një JPG? 150 00:08:55,220 --> 00:08:57,740 Si keni qenë mbajtur udhë e se? 151 00:08:57,740 --> 00:09:01,735 Më pas, në varësi të se, ju do ose shkruani në JPG tanishme që ju 152 00:09:01,735 --> 00:09:07,090 kanë hapur, apo jo shkruani atë në të gjitha, sepse ju nuk keni gjetur një JPG ende. 153 00:09:07,090 --> 00:09:10,870 Së fundi, një herë ju keni arritur në fund të fotografi, ju do të dëshironi për të mbyllur ndonjë 154 00:09:10,870 --> 00:09:12,590 fotografi që ju keni hapur mbetur. 155 00:09:12,590 --> 00:09:14,590 Ne duam që të jenë të pastra këtu. 156 00:09:14,590 --> 00:09:18,790 >> Dhe me këtë, ju keni gjetur të gjitha fotografi të humbur nga ai kujtim 157 00:09:18,790 --> 00:09:21,620 kartë, e cila është një feat shumë e mahnitshme. 158 00:09:21,620 --> 00:09:23,430 Pra, pat veten në anën e pasme. 159 00:09:23,430 --> 00:09:27,560 Por, ka një element më shumë për të PSET, e cila është contest. 160 00:09:27,560 --> 00:09:30,920 Ju do të gjeni se të gjitha fotografitë që e keni gjetur të vërtetë janë 161 00:09:30,920 --> 00:09:32,820 fotografitë e stafit CS50-së. 162 00:09:32,820 --> 00:09:38,500 Pra, nëse ju jeni në kampus ose diku pranë, atëherë ju mund të marrë fotografi me 163 00:09:38,500 --> 00:09:42,600 stafit, dhe seksioni që ka shumica e fotografi me anëtarë të stafit 164 00:09:42,600 --> 00:09:46,940 nga dosjet e tyre do të mbulohen të marrë një çmim të tmerrshëm. 165 00:09:46,940 --> 00:09:50,650 Me këtë, atëherë ju keni përfunduar shërohen PSET. 166 00:09:50,650 --> 00:09:53,600 Emri im është Zamyla, dhe kjo është CS50. 167 00:09:53,600 --> 00:10:01,835