[Tónlist spila] ZAMYLA CHAN: Við skulum takast batna. Batna er líklega uppáhalds PSET minn, og fyrst og fremst vegna þess að ég held að það sé virkilega, virkilega flott. Grundvallaratriðum, þú ert gefið minni kort skrá þar sem myndirnar hafa verið eytt. En hvað þú ert að fara að gera er að batna þá alla. OK. Svo það er mjög spennandi, en kannski svolítið erfið, vegna þess að þú ert gefið tómt C skrá og þú þarft að fylla það inn OK, þannig að við skulum brjóta þetta í viðráðanleg hluta. Þú þarft að opna minniskort skrá. Það virðist nógu einfalt. Þá finna upphaf á JPG mynd. Allar skrár á þessu minni kort eru að fara að vera jpgs. Þá, þegar þú hefur fundið í upphafi, þú ert að fara að opna nýjan JPG, að er, eins og að búa til JPG, og skrifa 512 bæti í einu þar til ný JPG er fundið, og binda enda á áætlun, einu sinni þú uppgötva lok skrárinnar. Svo fyrstu skrefin fyrst er að opna minniskortið skrá. En þú veist þetta nú þegar, og það er skrá I / O aðgerð sem er að fara til reynst mjög gagnlegt. OK. Svo hvað ert jpgs? Vegna þess að við þurfum að upphafi. Jæja, jpgs, rétt eins bita kort, eru bara röð af bytes. Sem betur fer, hverjum JPG byrjar með annaðhvort 0xff, 0xd8, 0xff, 0xe0 sekvens bæti, eða annar runa af bætum. Svo þessir fjórir bæti benda upphafið að JPG. Enginn annar en þeim tveimur samsetningar af fjórum bæti. Og sem betur fer fyrir okkur, annar staðreynd að við geta nýtt sér er að hver JPG er geymt hlið-við-hlið á minniskortinu. Ég hef fulltrúa í uppbyggingu minniskort schematicaiiy á þetta renna hér. Hér sérhver ferningur, hvert rétthyrningur, táknar 512 bæti og það byrjar með grátt í að við gerum ekki raunverulega hafa a JPG. En þá erum við högg loksins blokk með stjörnu. Það þýðir að fyrstu fjórir Bætiút af þeim 512 er einn af þeim tveimur byrja röð af JPG. Og við förum þaðan, og síðan einu sinni einn JPG endar, næsta einn byrjar. Við gerum ekki alltaf hafa eitthvað meira grár rúm á milli. En hvernig eigum við að lesa í raun og veru þetta, og lesa 512 bæti svo að við getum gert samanburðurinn fyrsta sæti? Jæja, við skulum fara aftur til fread, sem tekur í strúktúr sem mun innihalda bæti sem þú ert að lesa. Svo þú ert að fara að setja þá í það - stærð, fjölda, og þá inpointer að þú ert að lesa úr. Nú viljum við að lesa 512 í einu, og við viljum geyma þetta í buffer, Ég ætla að kalla það. Í grundvallaratriðum, þá ætlum við að halda á þessum 512 bæti og gera hluti með það, ekki satt? Við erum annað hvort að fara að bera saman fyrsta fjórum bytes, eða við erum að fara að lesa það í, OK? Svo þá gögn bendillinn þá þjóna sem biðminni þinn, og inpointer og vel, það er bara að fara að vera minniskortið. Aftur til okkar minniskort aðaldráttum. Við erum að fara að lesa 512 bæti í einu, geyma hvert 512-bæti blokk í buffer, að halda á þeim biðminni, þá 512 bæti, þar sem við vitum nákvæmlega hvað á að gera þá. Svo er upphaf ekki neitt, svo við munum lesa biðminni, bera saman það, og við munum ekki þurfa að gera neitt með það. Og þá, högg við loks stjörnu loka, sem þýðir að við höfum fundum fyrstu JPG okkar. Svo biðminni nú halda bæti úr því JPG. Í næsta skipti 512 bytes, því þeir eru ekki stjarna blokk, eru einnig hluti þeirrar JPG. Og jpgs samfelld þaðan á í, þar til við högg næsta JPG. Og þá heldur biðminni þá 512 bytes fyrir því JPG og svo framvegis, og svo framvegis. OK. Svo þegar þú högg the fyrstur stjörnumerkt blokk, fyrsta JPG, hvernig gera þú reyndar vel, opna hana? Skulum gera nýja JPG. Filenames fyrir JPG ert að fara að vera í formi, tala, tala, number.jpg, að þeir eru heitir í í hvaða röð þeir finnast, byrja á 0. Svo fyrsta JPG sem þú finna verður 000.jpg. Svo, líklega góð hugmynd að halda utan um hversu margar jpgs þú hefur fundið hingað til. Svo er að skrá nafn. En hvernig gera þú raunverulega að? Jæja, erum við að fara að nota fall sem kallast sprintf. A svolítið svipað printf, þar þú getur notað staðgengla fyrir strengi, nema í þessu tilfelli, sprintf mun prenta skráin út í núverandi skrá, ekki í flugstöðinni. OK. Svo hér sjáum við að við höfum titil, char array sem mun geyma hlýst band, og við framhjá í titill af the raunverulegur band með að tákn, rétt eins og við höfum lærði að gera með printf. En þetta númer sem ég hef hér mun gefa 2.jpg, ekki 002.jpg. Svo ég leyfi þér að finna út hvernig á að breyta Ígildi að gera rétt nafn. OK. Svo þegar þú hefur sprintf'd þá getur þú opna að skrá, vegna þess að það er til staðar í möppuna, með fopen, nota titill, og þá hvað háttur sem þú vilt til að opna þessa skrá inn Svo nú er að við höfum opnað nýja JPG skrá, nú getum við skrifað 512 bæti á a tími, þar til ný JPG finnst. Þannig að við skulum taka aðra útlit á setningafræði fwrite. Ég veit að ég er að sýna þessi mynd a mikið, en ég vil bara að ganga úr skugga um að þú krakkar fæ ekki of ruglaður, því Ég veit að það er mjög auðvelt að blanda upp fyrsta og síðasta rök í lagi. En mundu að þú ert að skrifa frá biðminni þín í út skrá myndum. Nú þegar þú veist hvernig skrifa 512 bæti inn JPG skrá sem þú hefur búin, vel, við viljum hætta að ferli þegar við höfum náð enda kortið okkar, vegna þess að það mun ekki vera einhverjar fleiri myndir til að finna. Þannig að við skulum fara aftur til fread einu sinni enn, ég lofa. fread skilar hversu margir hlutir á stærð, stærð, voru tilbúin í góðum árangri. Fullkomlega, þetta er að fara að vera hvað þú framhjá í fyrir fjölda, ekki satt? Þar sem þú ert að reyna að lesa númerið af þáttum stærð, stærð. En ef fread er ekki hægt að lesa það fjöldi staka, þá verður það aftur hvað sem tala það lesa með góðum árangri. Nú, einn mikilvægur hlutur að hafa í huga er að ef þú notar aðra skrá I / O virka eins fgetc, verður það einnig að skila hversu margir hlutir það að lesa með góðum árangri. Hvað er gagnlegt um þessa aðgerð er að ef þú notar aðgerðir inni í ástand, það verður að framkvæma sig á meðan að ákvarða að ástand, sem er bara mjög gagnlegt. Þannig að ef þú hefur þetta skilyrði, segja, ef fread biðminni, sizeof DOG, 2, músina, jafngildir jafngildir 1, sem þýðir að mig langar að lesa 2 hundar á þeim tíma. En ef fread skilar 1 í stað 2 eins og gert ráð fyrir, sem þýðir að það eru 2 hundar eftir í minn skrá, heldur 1. En ef það skilar 2, þá hef ég enn þessir 2 hundar inni í biðminni minni. Svo nú er um að gefur þér tilfinningu um hvernig á að stöðva fyrir lok skrárinnar, en við skulum fara í gegnum nú í rökfræði. Hvernig eigum við að stykki í raun allt þessara þátta saman? Þegar við fyrsta högg JPG okkar, þar við vitum að jpgs eru geymdar contiguously, munum við vera að skrifa þar við ná í lok kortið skrá. En við viljum ekki að skrifa nokkuð fyrr en þá. Svo það skiptir máli, ekki bara að við erum á upphafið að nýju JPG, en hvort við höfum þegar fundið JPG eða ekki. Ef það er upphafið að nýjum JPG, munum við langar að loka núverandi JPG okkar skrá ef við höfum eitt opin, og opin nýtt til að skrifa inn. Ef það er ekki að byrja á nýju JPG, þó munum við halda sömu JPG skrá opna og skrifa inn í það. Við munum skrifa biðminni okkar í hvort JPG skrá við höfum opið, að því tilskildu að við höfum einn opinn, auðvitað. Ef við höfum ekki fundið fyrstu JPG okkar enn, eigum við að skrifa ekki neitt. Og þetta ferli heldur áfram þangað til þú ná sambandi við lok kortsins skrá. Og að lokum, munt þú vilt gera viss um að þú fclose allir skrár sem þú hefur fopened. Þegar þú ert ánægð með hugtök, taka a líta á sumir sauðakóðanum, sem ég hef sett hér. Fyrst, þú vilt opna kortið skrá, og þá endurtaka eftirfarandi ferli þar til þú hefur náð enda á kortinu. Þú vilt lesa 512 bæti í stuðpúða. Að nota þessi buffer, youll 'vilja til að athuga hvort sem þú ert á the byrjun af a ný JPG eða ekki. Og svarið við þeirri spurningu mun áhrif skrá stjórnun - hvaða skrár þú opnar, sem sjálfur gera þér loka. Þá hefur þú fundið nú þegar JPG? Hvernig hefur þú verið að halda utan um það? Þá, eftir að þú munt annað hvort skrifa inn í núverandi JPG sem þú hafa opinn eða ekki skrifa það á alla, vegna þess að þú hefur ekki fundið JPG ennþá. Að lokum, þegar þú hefur náð í lok skráin, youll 'vilja til að loka hvaða eftir skrár sem þú hefur opinn. Við viljum vera snyrtilegu hér. Og með það, hefur þú náð öllum sem vantar skrá frá þessi minni kort, sem er nokkuð magnað feat. Svo klappa þér á bakinu. En, það er einn þáttur í á PSET, sem er keppni. Þú munt komast að því að allar myndirnar að þú hafir náð eru í raun myndir af starfsfólki CS50 er. Svo ef þú ert á háskólasvæðinu eða einhvers staðar nálægt, þá getur þú tekið myndir með starfsfólk, og þann hluta sem hefur flestar myndir með starfsmenn frá endurheimtum þeirra skrám mun fá ógnvekjandi verðlaun. Með það, þá þú hefur lokið að batna PSET. Mitt nafn er Zamyla, og þetta er CS50.