Tip:
Highlight text to annotate it
X
>> [MUSIC PLAYING]
>> ZAMYLA Chan: bərpa nin həll edək.
Recover yəqin ki, mənim sevimli pset olduğunu, və əsasən mən hesab edirəm, çünki
həqiqətən, həqiqətən, sərin.
Ümumiyyətlə, bir yaddaş sunulur kart fayl olan
şəkillər silindi.
Amma nə olacaq nə onlara bütün bərpa edir.
>> OK.
Belə ki, bəlkə həqiqətən maraqlı deyil, lakin Siz etdiyiniz çünki, az qorxuducu
boş C fayl və verilən Siz onu da doldurmaq lazımdır
OK, belə ki, bu qırmaq imkan idarə hissəyə.
Siz açmaq lazımdır yaddaş kartı fayl.
Ki, kifayət qədər sadə görünür.
Sonra əvvəlində tapmaq bir JPG image.
Bu yaddaş bütün faylları kart JPGs olacaq.
Sonra, bir dəfə, başlanğıcını tapmaq Siz yeni JPG açmaq olacaq ki,
kimi, bir JPG yaratmaq və 512 yazmaq yeni JPG qədər bir zamanda byte
aşkar və proqramı sona, bir dəfə Siz fayl sonu aşkar.
>> Belə ki, ilk addımlar ilk açmaq üçün yaddaş kartı fayl.
Amma artıq bunu bilirik və var olacaq ki, bir fayl I / O funksiyası
çox faydalı sübut edir.
OK.
Belə ki, JPGs nə var?
Biz əvvəlinə lazımdır, çünki.
Yaxşı, JPGs, yalnız bit xəritələr kimi, yalnız bayt ardıcıllığı var.
Neyse, hər JPG ya ilə başlayır 0xff, 0xd8, 0xff, 0xe0, bir sequence
bayt, və ya başqa bayt ardıcıllığı.
>> Belə ki, həmin dörd bytes göstərir jpg başlanğıc.
Bu iki birləşməsi başqa None dörd bayt.
Və xoşbəxtlikdən bizim üçün, başqa bir fakt ki, biz istifadə edə bilər ki, hər
JPG yan-yan saxlanılır yaddaş kartı.
Mən bir strukturu təmsil etdik sxematik bu yaddaş kartı
burada sürüşdürün.
Burada hər kvadrat, hər düzbucaqlı, 512 bayt təmsil və başlayır
biz ki, bir boz ilə həqiqətən JPG var.
>> Amma sonra biz nəhayət hit bir ulduz ilə bir blok.
O deməkdir ki, ilk dörd bytes həyata o 512 o iki biridir
jpg ardıcıllığı başlayır.
Və biz bir dəfə sonra oradan getmək və bir JPG növbəti bir başlayır, bitir.
Biz heç bir daha yoxdur arasında boz space.
>> Amma biz, həqiqətən, bu oxumaq yoxdur və biz edə bilər ki, 512 bayt oxumaq
müqayisə ilk yer?
Yaxşı, geri fread getmək imkan olan ehtiva edir ki, struct edir
Siz oxu etdiyiniz bytes.
Beləliklə, siz qoymaq olacaq orada olanlara -
ölçüsü, sayı, sonra inpointer Siz oxu etdiyiniz.
İndi biz bir zamanda 512 oxumaq istəyirəm, və biz bir bufer bu saxlamaq istəyirəm,
Mən zəng etmək üçün gedirəm.
>> Əsasən, biz keçirmək olacaq o 512 bayt üzərində və bunu
bu şeylər, sağ?
Biz ya ilk müqayisə etmək olacaq dörd bytes, və ya biz olacaq
OK, onu oxumaq?
Belə ki, sonra data pointer sonra olacaq Sizin bufer kimi xidmət, və
inpointer, yaxşı ki, yalnız gedir yaddaş kartı olmalıdır.
>> Bizim yaddaş kartı sxematik geri.
Biz bir zamanda 512 bayt oxumaq olacaq hər 512-byte blok saxlanılması
bufer daxil tutur üzərində Bildiyimiz qədər, həmin 512 bayt bufer
dəqiq nə onlara etmək.
Belə ki, başlanğıcı bir şey deyil, belə ki, biz *** oxumaq müqayisə, və lazımdır
biz onunla bir şey etmək lazım deyil.
Və sonra, nəhayət, biz bir ulduz edib biz etdik o deməkdir ki, blok
ilk JPG tapılmadı.
Belə ki, bufer indi keçirilməsi ki, JPG bayt.
>> Onlar 512 bytes, çünki növbəti dəfə bir ulduz bloku da var
ki, JPG hissəsi.
Və JPGs oradan davamlı biz növbəti JPG hit qədər,.
Və sonra bufer sonra keçirir 512 ki, JPG üçün bytes, və
belə, və s.
OK.
>> Siz ilk ulduz hit belə bir blok, ilk JPG, necə siz
həqiqətən, yaxşı, onu açmaq?
Yeni bir JPG edək.
Jpg üçün fayl edir formatında ola, sayı, sayı,
number.jpg ki, onlar adına edirik Onlar aşkar olan sifariş,
0 başlayır.
>> Belə ki, ilk JPG ki tapa 000.jpg olunacaq.
Belə ki, yəqin yaxşı bir fikirdir takip Siz indiyə qədər gördük neçə JPGs.
Belə ki, fayl adı var.
Amma necə həqiqətən ki, edə bilərəm?
Yaxşı, biz istifadə etmək olacaq bir funksiyası sprintf çağırıb.
Printf oxşar Bir az bit, harada Siz strings üçün placeholders istifadə edə bilərsiniz
bu halda istisna olmaqla, sprintf çap edəcək cari daxil fayl
directory deyil, terminala daxil.
>> OK.
Belə ki, burada biz adı var ki, bax, Bu saxlaya ki, char array
çıxan string, və biz keçmək ilə faktiki simli adı
tutucu, yalnız biz olduğunuz kimi printf ilə edə öyrənildi.
Amma burada var ki, bu kodu 2.jpg deyil 002.jpg verəcək.
Mən tapmaq üçün sizə tərk edəcəyik necə etmək üçün tutucu dəyişdirmək
düzgün adı.
>> OK.
Belə ki, bir dəfə siz sonra sprintf'd etdik Bu mövcud çünki, faylı açmaq
fopen ilə directory, istifadə adı, və istədiyiniz sonra nə rejimi
daxil faylı açmaq üçün
Belə ki, indi biz yeni bir JPG fayl açdı etdik ki, İndi biz bir 512 bayt yaza bilərsiniz
yeni JPG aşkar qədər vaxt.
Belə ki, başqa bir nəzər salaq fwrite sintaksis at.
>> Mən bu slide göstərən alıram bilirik ki, çox, lakin mən yalnız əmin etmək istəyirəm
Sizlərin də qarışıq almaq deyil, çünki Mən bunu çox asan olduğunu bilirik
ilk və son qarışdırmaq dəlil, xüsusilə.
Amma yazılı etdiyiniz unutmayın həyata fayl images daxil bufer.
>> İndi siz bilirsiniz ki necə yazmaq 512 Siz var ki, JPG fayla bayt
yaradılmış, yaxşı, biz ki, dayandırmaq istəyirəm biz sona çatdı etdik prosesi dəfə
kart, çünki olmayacaq aşkar etmək üçün bir daha images.
Belə ki, fread geri imkan bir daha söz verirəm.
fread ölçüsü necə çox maddələr qaytarır, ölçüsü, uğurla hazır idi.
İdeal halda, bu olacaq nə sağ, sayı keçmək?
Siz nömrəni oxumaq üçün çalışdığınız çünki ölçüsü, ölçüsü elementləri.
Amma fread oxumaq mümkün deyil, əgər elementlərin sayı, o qayıtmaq lazımdır
uğurla oxumaq nə nömrəsi.
>> İndi qeyd etmək bir mühüm şey ki, I / O başqa bir fayl istifadə əgər
fgetc kimi funksiyası, bu da qayıtmaq lazımdır uğurla oxumaq necə çox maddələr.
Bu funksiya haqqında faydalı edir ki, bir daxilində funksiyaları istifadə əgər
vəziyyəti, Bu isə özünü icra edəcəyik olan şərti, müəyyən
yalnız həqiqətən faydalı.
Belə ki, bu şərait varsa, demək, əgər fread bufer, sizeof DOG, 2,
pointer, 1 bərabərdir bərabərdir ki, Mən oxumaq istədiyiniz o deməkdir ki,
Zamanı 2 itlər.
Amma fread kimi əvəzinə 2 1 qaytarır əgər gözlənilir, 2 var o deməkdir ki,
itlər mənim fayl sol, əksinə 1.
Amma bu 2 qaytarır, onda mən hələ də Mənim bufer daxilində o 2 itlər.
>> Belə ki, indi ki, siz necə hissi verir fayl sonunda kontrol, lakin
indi məntiq yolu ilə gedək.
Necə biz, həqiqətən, bütün parça yoxdur birlikdə bu elementlərin?
Biz ilk JPG hit sonra, bəri biz JPGs saxlanılır bilirik ki,
contiguously, biz qədər yazılı olacaq Biz kart fayl sonu çatır.
Amma biz yazmaq istəmirəm bir şey daha sonra qədər.
Belə ki, biz istəyirik ki, yalnız məsələ yeni bir JPG və start, lakin olub
Biz artıq bir JPG və ya gördük.
>> Bu yeni JPG başlanğıc varsa, biz will Bizim cari JPG fayl əgər bağlamaq istəyir
biz bir açıq və açıq yazmaq üçün yeni bir.
Yeni JPG başlanğıc deyil, baxmayaraq, biz eyni JPG fayl saxlamaq lazımdır
açmaq və yazmaq.
Biz hansı bizim bufer yazmaq lazımdır Biz açıq JPG fayl ki, təmin
biz əlbəttə bir açıq var.
Biz ilk JPG tapılmadı varsa hələ, biz bir şey yazmaq deyil.
Və bu proses sizin qədər davam kart fayl sonu çatır.
>> Və nəhayət, siz etmək lazımdır Əgər hər hansı bir fclose əmin
Siz fopened etdik ki, faylları.
Siz rahat istəyirik anlayışlar, bəzi nəzər
Mən burada daxil etdiyiniz pseudocode.
Birincisi, kart fayl açmaq istəyirik, və sonra aşağıdakı prosesi təkrar
Siz əldə etdiyiniz qədər kart sonu.
Siz 512 bayt oxumaq istəyirəm bir bufer daxil.
Ki, *** istifadə edərək, siz yoxlamaq lazımdır Siz bir başlanğıc olsanız
yeni JPG və ya deyil.
Və suala cavab olacaq fayl idarə təsir -
siz açıq faylları, hansı olanları yaxın edirsiniz.
>> Sonra, siz artıq bir JPG gördük?
Necə saxlanılması edilmişdir ki track?
Sonra, bu asılı olaraq, ya will cari JPG yazmaq ki,
bütün bu yazmaq açıq, ya yoxdur, Siz hələ bir JPG tapılmadı çünki.
Nəhayət, bir dəfə sonunda əldə etdiyiniz fayl, hər hansı bir bağlamaq lazımdır
Siz açıq faylları qalan.
Biz burada səliqəli olmaq istəyirik.
>> Və ki, siz bütün bərpa etdik ki, yaddaş itkin faylları
olduqca gözəl feat olan kart.
Belə ki, geri özünüz Pat.
Lakin, bir çox element var Müsabiqə olan PSET,.
Siz tapmaq lazımdır ki, şəkillər bütün Siz bərpa etdik ki, həqiqətən var
CS50 heyəti şəkillər.
Beləliklə, siz kampus və ya haradasa əgər yaxın, sonra ilə şəkillər çəkə bilərsiniz
personal və var ki, bölmə heyət üzvləri ilə ən şəkillər
onların bərpa faylları olacaq zəhmli mükafat almaq.
Ki, sonra başa etdik pset bərpa.
My name Zamyla və bu CS50 edir.