[MUSIC Playing] ZAMYLA Chan: hadd kezelni vissza. Vissza a kedvencem Pset, és főleg azért, mert úgy gondolom, hogy ez nagyon, nagyon klassz. Alapvetően, akkor kap egy memória kartoték amelyben képeket törölték. De mit fogsz tennie, hogy visszaszerezze őket. OK. Szóval ez tényleg izgalmas, de talán egy kicsit félelmetes, mert te adott egy üres C fájlt, és meg kell adnia be! OK, úgyhogy törni ezt könnyen kezelhető részek. Azt akarja, hogy nyissa meg a memóriakártya fájl. Úgy tűnik, elég egyszerű. Aztán meg az elején egy JPG képet. Minden a fájlokat a memória kártya lesz jpgs. Majd ha egyszer megtalálja az elején, fogsz, hogy nyit egy új JPG, hogy a van, mint, hozzon létre egy JPG, írni és 512 byte, addig, amíg az új JPG van találtak, és befejezve a programot, miután észlelni a végén a fájl. Tehát az első lépéseket az első az, hogy nyitott A memóriakártya fájlt. De tudod, ez már, és ott Fájl I / O funkció fog igen hasznosnak bizonyulhat. OK. Tehát mi van jpgs? Mert kell az elején. Nos, jpgs, csakúgy, mint bit térkép, csak sorozatok bájt. Szerencsére, minden JPG kezdődik vagy 0xff, 0xd8, 0xff, 0XE0, az egyik sorozat byte, vagy egy másik bájtok sorozata. Így a négy bájt jelzi a kezdete egy JPG. Nem más, mint a két kombináció négy bájt. És szerencsére nekünk, egy másik tény, hogy lehet kihasználni, hogy minden JPG tárolják side-by-side a memóriakártyán. Már képviselte a szerkezet egy Memóriakártya sematikusan ezen csúsztassa itt. Itt minden téren, minden téglalap, jelent 512 bájt, és már indul is a szürke, amit mi nem Tényleg van egy JPG. De aztán végül nyomja a blokk egy csillag. Ez azt jelenti, hogy az első négy bájt ki azoknak a 512 egyike azoknak a két induló sorozata a JPG. És mi megy ott, és majd egyszer egy JPG véget ér, a következő alkalommal kezdődik. Mi soha nem lesz több szürke tér-között. De hogyan olvasni ezt, és olvasd el a 512 byte, hogy tudjuk, hogy Az összehasonlítás az első helyen? Nos, menjünk vissza a fread, ami veszi a struktúra, amely tartalmazni fogja A byte olvasod. Szóval megy, hogy azok ott - A méret, a számot, majd inpointer hogy olvasod a. Most azt szeretnénk olvasni 512 egy időben, és a szeretnénk tárolni ezt a puffert, Fogom nevezni. Alapvetően fogunk tartani fel azokat a 512 byte, és nem a dolgokat, igaz? Mi sem lesz összehasonlítani az első négy bájt, vagy megyünk olvastam, OK? Tehát akkor az adatokat mutató fog majd szolgálnak a puffer, valamint a inpointer, nos, ez csak megy hogy a memóriakártyára. Visszatérve a memóriakártyára sematikus. Fogunk olvasni 512 byte egy időben, tárolása minden 512 byte-os blokk egy puffer, kapaszkodott azok puffer, azok a 512 byte, amíg nem tudjuk, pontosan mit kell csinálni velük. Tehát az elején nincs semmi, így a akkor olvassa el a puffer, hasonlítsa össze, és akkor nem kell semmit vele. És akkor végül megüt egy csillag blokkolja, ami azt jelenti, hogy már találtak az első JPG. Tehát a puffer most tartsa bájtot hogy JPG. A következő alkalommal, 512 byte, mert ők nem egy csillag blokk, szintén része, hogy a JPG. És jpgs folytonos onnan be, amíg elérjük a következő JPG. És akkor a puffer, akkor tart 512 byte hogy a JPG és így tovább, és így tovább. OK. Tehát, ha bejön az első csillagos blokk, az első JPG, hogyan valójában, nos, nyissa meg? Csináljunk egy új JPG. A fájlnevek a JPG fog a megfelelő formátum, szám, szám, number.jpg, az, hogy ők megnevezett a sorrendet, amelyben azok találhatók, 0-nál kezdődik. Tehát az első JPG, amit meg fogják 000.jpg. Tehát, talán egy jó ötlet, hogy nyomon követhesse hány jpgs megtalálta eddig. Szóval ez a fájl nevét. De hogyan lehet valóban tenni ezt? Nos, megyünk, hogy egy nevű függvényt sprintf. Egy kicsit hasonlít a printf, ahol a akkor a helyőrző vonósokra, kivéve, ebben az esetben, a sprintf kiírja a fájlt ki a jelenlegi könyvtár, nem a terminál. OK. Tehát itt azt látjuk, hogy van címe, egy char tömb tárolja a eredő karakterlánc, és adja át a címe a tényleges karakterlánc helyőrző, ahogy már tanult köze printf. De ezt a kódot, hogy van itt ad 2.jpg, nem 002.jpg. Úgyhogy hagyjuk Önnek, hogy megtudja, hogyan lehet módosítsa a helyőrző, hogy a megfelelő nevet. OK. Szóval, ha egyszer már sprintf'd, akkor is megnyitni a fájlt, mert létezik a könyvtár, a fopen, a címet, és akkor bármi kívánt üzemmódot megnyitni a fájlt be Most, hogy már nyitott egy új JPG fájlt, most már írni 512 byte-os idő, amíg egy új JPG található. Szóval vessünk egy pillantást A szintaxis a fwrite. Tudom, hogy én vagyok mutatja ezt a slide a sokat, de én csak szeretnénk, hogy győződjön meg arról, hogy srácok nem kap túl zavaros, mert a Tudom, hogy ez nagyon könnyű keverjük össze az első és az utolsó érv, különösen. De ne feledjük, hogy írsz a A buffer az out fájlt képeket. Most, hogy tudod, hogy az írás 512 bytes be a JPG fájl már létre, nos, azt akarjuk állítani, hogy a folyamatot, amint elértük a végét a kártya, mert nem lesz több kép található. Akkor menjünk vissza a fread még egyszer, ígérem. fread visszatér, hogy hány elem méretű, méret, kész volt sikeres. Ideális esetben ez lesz bármilyen át az a szám, nem igaz? Mert olvasni próbál szám elemeinek, méretbeli. De ha fread nem tudja elolvasni, hogy elemek száma, akkor majd vissza bármilyen számot is olvasható sikerrel. Nos, egy fontos dolog megjegyezni, , hogy ha egy másik fájl I / O úgy működnek, mint fgetc, akkor az is vissza hány elem is olvasható sikerrel. Mi ez hasznos ennek a függvénynek, , hogy ha Ön funkcióit belsejében egy állapotban van, akkor végre magát, miközben megállapítására, hogy a feltétel, ami csak nagyon hasznos. Tehát ha ezt a körülmények, mondjuk, ha fread puffer, sizeof DOG, 2, mutató, értéke egyenlő 1-gyel, hogy azt jelenti, hogy szeretnék elolvasni 2 kutya abban az időben. De ha fread vissza 1 2 helyett, mint várható volt, ez azt jelenti, hogy van 2 kutya maradt a fájlban, hanem 1.. De ha visszatér 2, akkor még mindig van azok a 2 kutya belsejében a puffer. Tehát most, hogy ad egyfajta hogyan ellenőrizze a fájl végére, de a menjünk át most a logika. Hogy valójában darab minden Ezen elemek együtt? Amint elérünk az első JPG, hiszen tudjuk, hogy jpgs tárolt összefüggően, fogunk írni, amíg elérjük a végét a kártya fájlt. De nem akarok írni semmit addig. Tehát nem mindegy, nem csak, hogy állunk a kezdete egy új JPG, hanem az, hogy mi már találtunk egy JPG vagy sem. Ha ez a kezdete egy új JPG, fogunk akarja zárni a jelenlegi JPG fájlt, ha van egy nyitott, és nyitott egy újat, hogy ültesse át. Ha ez nem a kezdete az új JPG, bár, de folyamatosan ugyanazt a JPG fájl nyitni és írja bele. Majd levelet a puffert bármelyik JPG fájl már nyitva van, feltéve, hogy van egy nyitott, természetesen. Ha még nem találta meg az első JPG mégis, nem írunk semmit. És ez a folyamat folytatódik, amíg meg nem elérjük a végét a kártya fájlt. És végül, akkor szeretnénk, hogy meg arról, hogy fclose bármilyen fájlokat, hogy már fopened. Ha elégedett a fogalmak, hogy egy pillantást néhány pszeudokódját, amit már szerepelnek itt. Először is, szeretnénk megnyitni a kártyát fájlt, majd ismételje meg a következő eljárást amíg elérte a végén a kártyát. El szeretné olvasni 512 bájt egy puffer. Felhasználva, hogy puffer, akkor szeretnénk ellenőrizni hogy te vagy a kezdete egy új JPG vagy sem. És a válasz erre a kérdésre majd befolyásolja a fájlkezelés - mely fájlok megnyitásakor, ami is van közel. Ezután már már talált egy JPG? Hogy van tartva pálya, hogy a? Ezután, attól függően, hogy akkor sem írni az aktuális JPG, amit nyílt, vagy nem írom azt is, mert nem találtam a JPG, mégis. Végül, ha elérte a végét a fájlt, akkor szeretné, hogy zárjon be minden maradék fájlokat, hogy van nyitva. Azt akarjuk, hogy rendben van. És ezzel már vissza minden a hiányzó fájlokat, hogy a memória kártya, ami egy elég elképesztő feat. Így pat magad a hátán. De van még egy eleme A Pset, ami a verseny. Megtudja, hogy az összes kép hogy már vissza ténylegesen képek CS50 munkatársai. Tehát, ha az egyetemen, vagy valahol mellett, akkor lehet fotózni a a személyzet, és a szakasz, amely a a legtöbb kép a személyzet tagjai a saját visszanyert fájlok fog kap egy fantasztikus díjat. Ezzel, akkor már elkészült A vissza Pset. A nevem Zamyla, és ez CS50.