>> [Музика свира]
>> ЗАМИЛА цхан: Хајде да се позабаве опорави.
Спасавање је вероватно мој омиљени псет, и углавном због тога што мислим да је
стварно, стварно супер.
У суштини, ви сте дали памћење картица фајл у коме
слике су избрисане.
Али шта ћеш урадите је да се опорави их све.
>> У реду.
Дакле, то је заиста узбудљиво, али можда мало застрашујуће, јер си
дао празан фајл и Ц морате да га попуните унутра
У реду, па хајде да прекинемо ово у руковање деловима.
Ви ћете желети да отворите меморијска картица фајл.
То изгледа прилично једноставно.
Затим, наћи почетак од ЈПГ слику.
Сви фајлови на овој меморији картица ће бити ЈПГс.
Онда, када пронађете почетак, ћеш отворити нову ЈПГ, да
је, као, креирајте ЈПГ, и писати 512 бајт у време док је нови ЈПГ
пронашао, а завршава програм, једном ти открити крај датотеке.
>> Дакле, први кораци Први је да се отвори датотека на меморијску картицу.
Али ви то већ знате, и ту је фајл И / О функција које ће
показати веома корисним.
У реду.
Дакле, шта су ЈПГс?
Зато морамо да га на почетку.
Па, ЈПГс, баш као битне мапе, су само низови бајтова.
Срећом, сваки ЈПГ почиње са било 0кфф, 0кд8, 0кфф, 0кЕ0, једна секвенца
бајтова, или други секвенца бајтова.
>> Дакле, та четири бајта указују почетак ЈПГ.
Нико осим те две комбинације од четири бајта.
И срећом за нас, још једна чињеница да смо могу искористити је да сваки
ЈПГ се чувају раме уз раме на меморијској картици.
Ја сам представљао структуру меморијска картица шематски на ово
слајд овде.
Овде, сваки квадрат, правоугаоник сваки, представља 512 бајтова, а почиње
са сиве у које ми не стварно имају ЈПГ.
>> Али онда смо коначно погодио блок са звездом.
То значи да су прве четири бајта оут од оних 512 су један од та два
почев секвенци ЈПГ.
И идемо одатле, а онда једном један ЈПГ завршава, следећи почиње.
Ми никада не више имати сиви простор између.
>> Али како смо заправо читају ово, и прочитајте 512 бајтова, тако да можемо да
поређење прво место?
Па, хајде да се вратимо на фреад, која узима у струцт који ће садржати
бајтова које читате.
Тако ћеш ставити они тамо -
величина, број, а затим инпоинтер да читате.
Сада, ми смо желели да прочитате 512 истовремено, и желимо да сачувате ово у бафер,
Ја ћу да га зовем.
>> У суштини, ми идемо да се одржи на тих 512 бајтова и уради
ствари са њом, зар не?
Ви или Ми идемо да се упореде први четири бајта, или ћемо
прочитајте га у, у реду?
Дакле, онда подаци показивач ће онда служе као пуфера, а
инпоинтер, добро, то је само иде да буде ваша меморијска картица.
>> Назад на нашем меморијске картице шеми.
Идемо да прочитате 512 бајтова у једном тренутку, складиштење сваки 512-бајта блока
у бафер, држе оне бафер, те 512 бајтова, док не знамо
тачно шта да урадите их.
Дакле, почетак није ништа, тако ћемо читати бафер, упоредите га, и
нећемо морати ништа да радите са њим.
И онда, коначно погодио звезду блокирају, што значи да имамо
нашао наш први ЈПГ.
Тако бафер сада држите бајтова из тог ЈПГ.
>> Следећи пут 512 бајта, јер су Не звезда блок, су такође
део тог ЈПГ.
И ЈПГс су континуирано одатле на у, док не удари следећи ЈПГ.
А онда бафер тада има 512 бајта за тај ЈПГ, и
тако даље, и тако даље.
У реду.
>> Дакле, када сте први ударио звездом блок, прво ЈПГ, како радите
заправо, добро, то отворити?
Хајде да направимо нови ЈПГ.
У фајлова за ЈПГ ће бити у формату, број, број,
нумбер.јпг, у који они именован у поредак у коме се налазе,
са почетком у 0.
>> Дакле прво ЈПГ сте да наћи ће се 000.јпг.
Дакле, вероватно је добра идеја да пратите колико ЈПГс сте пронашли до сада.
Дакле, то је име датотеке.
Али како да заправо чине то?
Па, ми ћемо користити функција зове спринтф.
Мало слична принтф, где можете користити чуваре места за гудаче,
осим у овом случају, спринтф ће штампати фајл напоље у струју
директоријум, не у терминал.
>> У реду.
Дакле, овде видимо да имамо титулу, Чар низ који ће сачувати
Добијена ниска, а ми прође у наслов стварне ниске са
Чувар места, само смо желели смо научили да раде са принтф.
Али ово код које сам овде ће дати, а не 2.јпг 002.јпг.
Зато ћу оставити на вама да сазнате како да измените чувара места да би
тачан назив.
>> У реду.
Дакле, када сте онда спринтф'д можете отворите тај фајл, јер она постоји у
Ваш именик, са фопен, користећи наслов, а онда шта год хоћеш режим
на унутра отвори тај фајл
Дакле, сада када смо отворили нову ЈПГ, Сада можемо да пишемо 512 бајтова у
време, док нови ЈПГ се нашао.
Дакле, хајде да погледамо још у синтакси фврите.
>> Знам да сам ово показује слајд много, али ја само желим да се уверите да
момци немојте се превише збуњени, јер Знам да је врло лако да се
помешати прва и последња Аргумент, посебно.
Али запамтите да пишеш из Ваш бафер у фајл ван слике.
>> Сада када знате како пишу 512 бајтова у вашем ЈПГ фајл који сте
створио, па, ми желимо да престане да Процес када смо стигли до краја
наша картица, јер тамо неће бити било још фотографија да буде пронађено.
Па хајде да се вратимо на фреад још једном, обећавам.
фреад враћа како много ставки величине, величина, били спремни на успешно.
У идеалном случају, ово ће бити шта год прође у за број, зар не?
Зато што ви покушавате да прочитате број елемената величине, величине.
Али ако фреад није у стању да прочита да број елемената, онда ћемо се вратити
год број успешно читати.
>> Сада, једна важна ствар коју треба напоменути је да ако користите неки други фајл И / О
функција као фгетц, такође ће се вратити колико ставки је успешно читати.
Шта је корисно о овој функцији је да ако користите функције унутар
услов, она ће се извршавати док одређивања тог стања, што је
Само стварно корисно.
Дакле, ако имате ове услове, рецимо, ако фреад бафер, сизеоф ДОГ, 2,
показивач, једнако једнак 1, то значи да бих волео да прочитам
2 паса у то време.
Али ако фреад враћа 1 уместо 2 као Очекује, то значи да постоје 2
пси оставио у мом досијеу, већ 1.
Али, ако се врати 2, онда имам још ти пси 2 унутар мог пуфера.
>> Дакле, сада да вам даје осећај како да провери за крај фајла, али
идемо кроз сада логику.
Како заправо комад све од ових елемената заједно?
Када смо погодио наш први ЈПГ, пошто знамо да се чувају ЈПГс
цонтигуоусли, ми ћемо писати до смо до краја датотеке картице.
Али ми не желимо да пишем ништа до тада.
Тако је то важно, не само да смо у почетак новог ЈПГ, али да ли
већ смо нашли ЈПГ или не.
>> Ако је почетак новог ЈПГ, ми ћемо Желим да затворите наш тренутни ЈПГ ако
имамо један отворен, и отворен нови да пишу у.
Ако то није почетак новог ЈПГ, мада, ми ћемо задржати исту ЈПГ
отворити и писати у то.
Ми ћемо писати наше бафер у који год ЈПГ фајл имамо отворене, под условом да
имамо један отворени, наравно.
Ако нисмо нашли наш први ЈПГ ипак, не пишем ништа.
И овај процес се наставља све док не до краја датотеке картице.
>> И на крају, ви ћете желети да Проверите да ли сте фцлосе било
датотеке које сте фопенед.
Када сте задовољни са концепти, погледајте неке
Псеудокод, који сам овде укључени.
Прво, ви желите да отворите датотеку картице, а затим поновите следећи поступак
док не дођете до крај картице.
Желите да прочитате 512 бајтова у пуферу.
Користећи тај бафер, ви ћете желети да проверите да ли сте на почетку
нови ЈПГ или не.
А одговор на то питање ће утицати на ваш управљање датотекама -
које датотеке које отворите, који они ти затворити.
>> Затим, да ли сте већ нашли ЈПГ?
Како сте били на чувању колосек то?
Затим, у зависности од тога, или ћу пишу у тренутном ЈПГ који сте
имају отворен, или не писати га уопште, јер нисте нашли ЈПГ још.
На крају, када сте стигли до краја фајл, ви ћете желети да затворите било који
Преостали датотеке које сте отворили.
Ми желимо да будемо уредни овде.
>> И са тим, ви сте опоравио све недостајуће фајлове из тог меморије
картица, која је прилично невероватан подвиг.
Дакле пат се на леђима.
Али, постоји још један елемент псет, који је такмичење.
Наћи ћете да све слике да си се опоравио су заправо
слике особља ЦС50-а.
Дакле, ако сте на кампусу или негде близу, онда можете да снимате слике са
особље, а део који има већина слике са запосленима
од својих опоравио фајлова ће добити страшан награду.
Уз то, онда сте завршили опорави псет.
Моје име је Замила, а то је ЦС50.