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