[Glazba svira] ZAMYLA Chan: Idemo se borila oporaviti. Obnova je vjerojatno moj najdraži pset, i uglavnom zbog toga što mislim da je stvarno, stvarno cool. U osnovi, ti si dao memorije kartica datoteka u kojoj slika je izbrisana. No, ono što će se učiniti je oporaviti ih sve. OK. Dakle, to je stvarno uzbudljivo, ali možda malo zastrašujuće, jer si dao prazna C datoteku i morate ga popuniti u. OK, pa neka je razbiti taj u rukovanje dijelovima. Vi ćete želite otvoriti memorijske kartice datoteku. To mi se čini vrlo jednostavna. Zatim, naći početak u JPG sliku. Svi spisi o ovoj memoriji Kartica će biti JPGs. Tada, nakon što ste pronašli početak, idete otvoriti novu JPG, da je, kao što je, stvoriti JPG, i pisati 512 bajt u vrijeme dok novi JPG je pronašao, a završava program, jednom vam otkriti kraj datoteke. Dakle, prvi koraci Prvi je otvoriti datoteka memorijska kartica. Ali vi to već znate, a tu je file I / O funkcija koja će se pokazati vrlo korisnim. OK. Pa što su JPGs? Zato nam je potrebno za početak ga. Pa, JPGs, baš kao bitne kartama, su samo sekvence bajtova. Srećom, svaki JPG počinje s bilo 0xFF, 0xd8, 0xFF, 0xe0, jedan niz bajtova, ili drugi slijed bajtova. Dakle ta četiri bajta ukazuju početak JPG. Nitko osim te dvije kombinacije od četiri bajta. I srećom za nas, još jedna činjenica da smo mogu iskoristiti je da svaka JPG pohranjen rame uz rame na memorijsku karticu. Ja sam zastupao strukturu memorijska kartica shematski na ovo slajd ovdje. Evo, svaki kvadratni, svaki pravokutnik, predstavlja 512 bajtova, a ona počinje s bojom da mi ne stvarno imaju JPG. Ali onda smo napokon pogodio blok sa zvijezdom. To znači da je u prva četiri bajta out od onih 512 su jedan od ta dva s početkom sekvence JPG. I idemo od tamo, a onda odjednom jedan JPG završava, sljedeći počinje. Mi nikada ne morate više siva prostor između. Ali kako mi zapravo pročitati ovo, i pročitajte 512 bajtova, tako da možemo napraviti Usporedba prvo mjesto? Pa, idemo natrag na fread, koji uzima u struct koja će sadržavati su bajtova to čitaš. Tako da ćeš staviti oni tamo - veličina, broj, a zatim inpointer to čitaš iz. Sada, želimo pročitati 512 u isto vrijeme, i želimo pohraniti to u tampon, Ja ću ga nazvati. Uglavnom, idemo na čekanju na tih 512 bajtova i učiniti stvari s njim, zar ne? Mi ili će usporediti prvi četiri bajta, ili ćemo čitajte ga, OK? Pa onda pointer podaci će potom služi kao pufer, i inpointer, dobro, to je samo ide da se vaša memorijska kartica. Natrag na naše memorijske kartice shematski. Idemo čitati 512 bajtova u isto vrijeme, spremanje svaki 512-byte blok u tampon, drzi onih tampon, te 512 bajtova, dok nismo znali upravo ono što im je činiti. Dakle, početak nije ništa, pa ćemo čitati tampon, usporedite ga, a nećemo morati ništa učiniti s njom. I onda, napokon smo hit zvijezdu blokirati, što znači da imamo pronašao naš prvi JPG. Dakle tampon sada držite bajtova iz tog JPG. Sljedeći put 512 bajtova, jer oni su Ne blok zvijezda, također su dio tog JPG. I JPGs su stalno od tamo na u, dok se ostvario sljedeći JPG. I onda tampon onda drži 512 bajtova za taj JPG i itd., i tako dalje. OK. Dakle, nakon što je prvi pogodio sa zvijezdom blok, prvi JPG, kako vam je činiti zapravo, dobro, otvorite ga? Idemo napraviti novi JPG. Nazive za JPG će biti u obliku, broj, broj, number.jpg, u koje su oni nazvali u redoslijed u kojem se nalaze, s početkom u 0. Dakle, prva JPG li da naći će se 000.jpg. Dakle, vjerojatno je dobra ideja da se pratiti koliko JPGs ste do sada pronašao. Tako da je taj naziv. No, kako ti zapravo čine to? Pa, idemo na korištenje funkcija zove sprintf. Malo slična printf, gdje možete koristiti rezervirana mjesta za gudače, osim u ovom slučaju, sprintf će ispisati file van na struju imenik, a ne u terminal. OK. Dakle, ovdje vidimo da imamo naslov, char polje koje će pohraniti rezultanta string, i prolazimo u Naslov stvarni string s rezervirano, samo smo željeli smo naučili raditi s printf. Ali ovo kod koji imam ovdje će dati 2.jpg, a ne 002.JPG. Dakle, ja ću ostaviti na vama je da saznate kako mijenjati rezervirano napraviti Točan naziv. OK. Dakle, nakon što ste sprintf'd onda možete otvoriti tu datoteku, jer postoji u svoj katalog, s fopen, pomoću naslov, a zatim god način želite otvoriti tu datoteku u. Dakle, sada kada smo otvorili novu JPG datoteku, Sada možemo napisati 512 bajtova po vrijeme, dok se novi JPG nalazi. Tako ćemo još jednom pogledati na sintaksu fwrite. Znam da sam ovo prikazati slajd puno, ali ja samo želim da biste bili sigurni da dečki nemojte se previše zbunjeni, jer Znam da je to vrlo lako pomiješati prvi i zadnji put argument, osobito. No, ne zaboravite da ste pisanje iz Vaš tampon u out slike datoteka. Sada kada znate kako pisati 512 bajtova u svoj JPG datoteke koje ste stvorio, dobro, želimo da se zaustavi taj Proces nakon što smo došli do kraja naša kartica, jer tu neće biti bilo više slika kako bi se naći. Tako ćemo se vratiti na fread još jednom, obećajem. fread vraća kako mnoge stavke veličine, veličina, bili su spremni na uspješno. U idealnom slučaju, to će biti ono što prođe u za brojem, zar ne? Budući da pokušavate pročitati broj elemenata veličine, veličine. Ali ako fread nije u stanju pročitati da broj elemenata, onda ću se vratiti bez obzira na broj uspješno pročitati. Sada, jedna važna stvar je imati na umu da ako koristite neki drugi file I / O funkcija kao fgetc, i da će to vratiti Koliko stavki je uspješno čitanje. Što je korisno o ovoj funkciji je da ako koristite funkcije unutar stanje, to će se izvršavati, a utvrđivanja taj uvjet, koji je samo jako korisno. Dakle, ako imate ove uvjete, recimo, ako fread tampon, sizeof DOG, 2, pointer, jednako jednak 1, koji znači da bih želio pročitati 2 psi u to vrijeme. Ali ako fread vraća 1 umjesto 2 kao Očekuje se, to znači da postoje 2 psi ostavio u mojoj datoteci, nego 1. No, ako se vrati 2, onda još uvijek imam te 2 psi unutar moje tampon. Pa sada da vam daje osjećaj kako provjeriti kraj datoteke, ali idemo kroz sada logike. Kako mi zapravo komad sve od ovih elemenata zajedno? Nakon što smo pogodak naš prvi JPG, budući znamo da su JPGs pohranjeni contiguously, mi ćemo pisati sve smo do kraja datoteke kartice. No, mi ne želimo pisati sve do tada. Dakle, to je važno, ne samo da smo na početak novog JPG, no je li već smo našli JPG ili ne. Ako je početak novog JPG, mi ćemo žele zatvoriti našu trenutnu JPG datoteku ako imamo jedan otvoren, i otvoren novi pisati u. Ako to nije početak novog JPG, Ipak, mi ćemo zadržati istu JPG datoteku otvoriti i pisati u to. Mi ćemo napisati naše tampon u god JPG datoteke imamo otvoren, pod uvjetom da imamo jedno otvoreno, naravno. Ako nismo pronašli naš prvi JPG Ipak, mi ne napisati ništa. A taj proces se nastavlja sve dok vas do kraja datoteke kartice. I na kraju, da ćete želite napraviti sigurni da ste fclose bilo datoteke koje ste fopened. Nakon što ste zadovoljni s pojmovi, pogledati neke pseudocode, što sam uključena ovdje. Prvo, želite otvoriti datoteku kartice, a zatim ponovite sljedeći postupak dok ne zadovoljite kraj kartice. Želite li pročitati 512 bajtova u puferu. Koristeći tu tampon, da ćete želite provjeriti da li ste na početku Nova JPG ili ne. A odgovor na to pitanje neće utjecati na upravljanje datotekama - koja slika vam se otvoriti, što one ti zatvoriti. Onda, jeste li već našli JPG? Kako ste bili čuvanje Staza od toga? Zatim, ovisno o tome da, možete ili ćete pisati u trenutnoj JPG koju imaju otvoren, ili ne pisati uopće, jer niste našli JPG još. Konačno, nakon što sam došao do kraja datoteka, da ćete želite zatvoriti Preostala datoteke koje imate otvorene. Želimo biti uredan ovdje. A uz to, da ste oporavio sve nedostaju datoteke iz tog sjećanja kartica, što je prilično nevjerojatna podvig. Tako se maziti na leđima. No, tu je još jedan element koji bi pset, koja je natjecanje. Naći ćete da su sve slike da ste oporavio su zapravo slike CS50 osoblja. Dakle, ako ste na kampusu ili negdje u blizini, onda možete fotografirati s osoblja, a dio koji ima većina slika s osobljem iz svojih oporavio datoteke će dobili strašan nagradu. Uz to, onda si gotov oporaviti pset. Moje ime je Zamyla, a to je CS50.