[Mūzikas atskaņošanai] ZAMYLA Chan: Pieņemsim risināt atgūt. Atgūt, iespējams, ir mana mīļākā PSET, un galvenokārt tāpēc, ka es domāju, ka tas ir ļoti, ļoti foršs. Būtībā, jūs esat dota atmiņa card fails, kurā attēli ir izdzēsti. Bet tas, ko jūs gatavojas darīt, ir atgūt tos visus. OK. Tātad, tas ir ļoti aizraujoši, bet varbūt nedaudz iebiedēt, jo tu esi dota tukša C failu un Jums ir jāaizpilda tā collas Labi, tāpēc pieņemsim lauzt šo pārvaldāmu daļās. Jūs vēlaties, lai atvērtu Atmiņas kartes failu. Tas šķiet vienkāršs pietiekami. Tad, atrast sākumu no JPG attēlu. Visi faili par šo atmiņu karte būs JPGs. Pēc tam, kad jūs atradīsiet sākuma, jūs gatavojas atvērt jaunu JPG, ka ir, piemēram, izveidot JPG, un rakstīt 512 baits laikā, kamēr jauna JPG ir konstatēts, un beidzot ar programmu, tiklīdz Jums atklāt beigām failu. Tātad pirmie soļi, pirmais ir atvērt atmiņas kartes failu. Bet jūs zināt, tas jau ir, un tur ir failu I / O funkciju, kas notiek, lai izrādīties ļoti noderīga. OK. Tātad, kādi ir JPGs? Tāpēc, ka mums ir nepieciešams sākumā to. Nu, JPGs, tāpat kā bitu kartēm, ir tikai sekvences baitu. Par laimi, katru JPG sākas ar vai nu 0xff, 0xd8, 0xff, 0xe0, viens secība baitu, vai cita secība baitu. Tātad šie četri baiti norāda sākums JPG. Neviens cits kā šo divu kombinācijām četru baitu. Un par laimi mums, vēl viens fakts, ka mēs var izmantot, ir, ka katrs JPG tiek glabāti side-by-side atmiņas kartē. Man bija struktūru Atmiņas kartes shematiski par šo slaidu šeit. Lūk, katru kvadrātveida, katrs taisnstūris, ir 512 baiti, un tas sāk ar Gray, ka mums nav tiešām ir JPG. Bet tad mēs beidzot hit bloks ar zvaigzni. Tas nozīmē, ka pirmie četri baiti out no tiem 512 ir viens no šiem diviem sākot sekvences JPG. Un mēs aiziet no turienes, un pēc tam, kad viens JPG beidzas, nākamais sākas. Mums nav kādreiz ir vairāk pelēks telpas vidu. Bet kā mēs varam faktiski izlasīt šo, un lasīt 512 baiti, lai mēs varētu veikt salīdzinājums pirmajā vietā? Nu, iesim atpakaļ uz fread, kas notiek ar struktūrai, kas satur baiti, ka jūs lasāt. Tātad jūs gatavojas īstenot tiem, kas tur - lielumu, skaitu, un pēc tam inpointer ka jūs lasāt no. Tagad mēs vēlamies, lai izlasītu 512 laikā, un mēs vēlamies saglabāt šo buferi, Es esmu gatavojas, lai izsauktu to. Būtībā, mēs ejam, lai noturētu uz šiem 512 baitu un darīt lietas ar to, labi? Mēs vai nu gatavojas salīdzināt pirmais četri baiti, vai mēs spēsim lasīt to, OK? Tātad dati rādītājs tam kalpo kā savu buferi, un pēc inpointer, labi, ka ir tikai gatavojas lai atmiņas karti. Atpakaļ uz mūsu atmiņas kartes shematisks. Mēs ejam, lai izlasītu 512 baiti laikā, glabāšanai katru 512 baitu bloku buferī, kam uz tiem buferis, šos 512 baiti, kamēr mēs zinām, tieši to, ko darīt tiem. Tāpēc sākumā nav nekas, tāpēc mēs lasīt buferi, salīdzināt to, un mums nav nepieciešams kaut ko darīt ar to. Un tad mēs beidzot hit zvaigzne bloķēt, kas nozīmē, ka mēs esam konstatēts, mūsu pirmo JPG. Tāpēc bufera tagad turēt baiti no šī JPG. Nākamreiz, 512 baiti, jo viņi ne zvaigzne bloks, ir arī daļa no šīs JPG. Un JPGs ir nepārtraukti no turienes gada ir, līdz brīdim, kad mēs hit nākamo JPG. Un pēc tam buffer tad tur 512 baiti par šo JPG, un tā tālāk, un tā tālāk. OK. Tātad, kad jūs hit pirmo zvaigzni bloks, pirmkārt JPG, kā jūs faktiski, labi, atveriet to? Veidosim jaunu JPG. Par JPG datņu nosaukumus gatavojas tādā formātā, numurs, numurs, number.jpg, jo viņi nosaukts kārtību, kādā tie tiek atrasti, sākot no 0. Tātad pirmais JPG, ka jūs atrast būs 000.jpg. Tātad, iespējams, laba ideja, lai sekotu cik daudz JPGs esat atradis līdz šim. Tātad, tas ir faila nosaukums. Bet kā jūs faktiski darīt, ka? Nu, mēs ejam, lai izmantotu funkciju sauc sprintf. Mazliet līdzīgi printf, kur Jūs varat izmantot vietturus stīgas, izņemot šajā gadījumā sprintf drukāt failu ārā pašreizējo direktoriju, nevis uz terminālu. OK. Tāpēc šeit mēs redzam, ka mums ir nosaukums, char masīvs, kas saglabās izrietošo stīgu, un mēs caurlaide nosaukums faktiskā string ar vietturis, tāpat kā mēs esam iemācījušies darīt ar printf. Bet tas kods, kas man ir šeit dos 2.JPG, nevis 002.jpg. Tāpēc es ņemšu atvaļinājumu jums, lai uzzinātu, kā modificēt vietturi, lai padarītu pareizais nosaukums. OK. Tātad, kad jūs esat sprintf'd tad jūs varat atvērt šo failu, jo tas eksistē jūsu direktorija ar fopen, izmantojot nosaukums, un tad kāds režīms vēlaties atvērt šo failu iekšā Tāpēc tagad, ka mēs esam atvēruši jaunu JPG failu, Tagad mēs varam rakstīt 512 baiti at laiks, kamēr jaunais JPG ir atrasts. Tātad, pieņemsim citu izskatu pie sintaksi fwrite. Es zinu, ka es esmu parādot šo slaidu daudz, bet es tikai vēlos, lai pārliecinātos, ka jūs puiši nesaņem pārāk sajaukt, jo Es zinu, ka tas ir ļoti viegli sajauc pirmo un pēdējo arguments, jo īpaši. Bet atcerieties, ka jūs esat rakstiski no Jūsu bufera vērā File attēlus. Tagad, kad jūs zināt, kā rakstīt 512 baiti savā JPG failu, kas jūs esat izveidots, labi, mēs vēlamies, lai apturētu, ka process, kad mēs esam sasnieguši mūsu karti, jo tur nebūs jebkuri vairāk bildes var atrast. Tāpēc iesim atpakaļ uz fread vēlreiz, es apsolu. fread atgriežas kā daudz priekšmetus par lielumu, izmērs, bija gatavi veiksmīgi. Ideālā gadījumā tas būs kāds Jūs pāriet uz numuru, vai ne? Tāpēc, ka jūs mēģināt lasīt numuru elementu izmēru, izmēru. Bet, ja fread nespēj lasīt, ka vairāki elementi, tad tas būs atpakaļ kāds numurs tas lasīt veiksmīgi. Tagad, viena svarīga lieta atzīmēt ir ka, ja jūs izmantojat citu failu I / O funkcijas, piemēram, fgetc, tas būs arī atpakaļ cik daudz preces to lasīt veiksmīgi. Kas ir noderīgi par šo funkciju ka, ja jūs izmantojat funkcijas iekšpusē nosacījums, tas būs izpildīt sevi, bet nosakot, ka stāvoklis, kas ir tikai patiešām noderīga. Tātad, ja jums ir šī apstākļus, teiksim, ja fread buferis, sizeof DOG, 2, rādītājs, vienāds vienāds ar 1, kas nozīmē, ka es gribētu, lai lasītu 2 suņi brīdī. Bet, ja fread atgriež 1, nevis 2 kā sagaidāms, kas nozīmē, ka ir 2 suņiem atstāja manā failā, bet gan 1. Bet, ja tas atgriež 2, tad man vēl ir šie 2 suņi iekšpusē manu bufera. Tāpēc tagad, ka dod jums sajūtu par to, kā pārbaudīt beigās failu, bet iesim cauri tagad loģiku. Kā mēs tiešām gabals visiem šie elementi kopā? Pēc tam, kad mēs hit mūsu pirmo JPG, jo mēs zinām, ka JPGs tiek glabāti contiguously, mēs rakstiski līdz mēs beigs karšu materiāliem. Bet mēs negribam, lai rakstītu kaut līdz tam. Tātad tas ir svarīgi, ne tikai to, ka mēs esam pie sākums jaunai JPG, bet vai mēs jau esam atraduši JPG vai ne. Ja tas ir sākums jaunam JPG, mēs vēlaties aizvērt mūsu pašreizējo JPG failu, ja mums ir viena atvērta un atklāta jauna rakstīt par. Ja tas nav sākums jaunās JPG, lai gan, mēs saglabāt to pašu JPG failu atvērt un rakstīt par to. Mēs rakstīt mūsu bufera uz izvēloties JPG fails mums ir atvērts, ar nosacījumu, ka mums ir viens atklāts, protams. Ja mēs neesam atraduši savu pirmo JPG tomēr, mums nav rakstīt neko. Un šis process turpinās, kamēr jums beigs karšu materiāliem. Un visbeidzot, jūs vēlaties, lai pārliecinieties, ka jūs fclose jebkura failus, ka jūs esat fopened. Kad esat apmierināts ar koncepcijas, ieskatieties daži pseudocode, kas es esmu iekļauts šeit. Pirmkārt, jūs vēlaties, lai atvērtu kartes failu, un pēc tam atkārtojiet šo procesu līdz esat sasnieguši gals karti. Jūs vēlaties lasīt 512 baiti buferī. Izmantojot šo buferi, jūs vēlaties, lai pārbaudītu vai jūs esat sākumā Jaunais JPG vai ne. Un atbilde uz šo jautājumu būs ietekmēt jūsu failu pārvaldību - kas failus atvērt, kas tiem jums tuvu. Tad jūs esat jau atraduši JPG? Cik tu esi bijis tur dziesmu no tā? Pēc tam, atkarībā no tā, ka jūs vai nu iestrādāt pašreizējā JPG, ka jūs ir atvērts, vai ne rakstīt to visu, jo jums nav atrasts JPG vēl. Beidzot, kad jūs esat sasnieguši failu, jūs vēlaties slēgt jebkuru Atlikušo failus, kas ir atvērts. Mēs gribam būt sakārtot šeit. Un ar to, ka jūs esat atgūt visus trūkstošos failus no šīs atmiņas karte, kas ir diezgan pārsteidzošs feat. Tātad, pat sevi par atpakaļ. Bet tur ir vēl viens elements, kas PSET, kas ir konkurss. Jūs atradīsiet, ka visas bildes ka jūs esat jāatgūst faktiski bildes CS50 personāla. Tātad, ja jūs esat par universitātes pilsētiņā vai kaut kur tuvu, tad jūs varat veikt bildes ar darbinieki, un sadaļa, kas ir vairums bildes ar darbiniekiem no savām atgūtajām failiem būs saņemt awesome balvu. Ar to, ka tad, kad esat pabeidzis atgūt PSET. Mans vārds ir Zamyla, un tas ir CS50.