>> [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.