>> [MUZIK Bermain]
>> ROB Bowden: Hi.
Saya Rob, dan mari kita berharap penyelesaian ini membantu meletakkan anda
di jalan raya untuk pemulihan.
Jadi mari kita memulakan.
>> Kita lihat bahawa segera kami hanya untuk memastikan bahawa kita
menggunakan Pulih betul.
Jadi penggunaan hanya perlu menjadi sesuatu seperti slash dot pulih.
>> Sekarang kita akan membuka dijangka kad dot fail mentah.
Kita lihat di sini bahawa kita menggunakan tetap garis bawah mentah nama fail,
yang di sini kita mempunyai hash ditakrifkan sebagai kad dot mentah.
OK.
>> Oleh itu, kita perlu memastikan bahawa berjaya dibuka kerana jika ia
tidak, maka kita harus memberi amaran kepada pengguna.
Tetapi menganggap bahawa ia lakukan, kami kini akan mengisytiharkan penampan saiz JPEG
memfailkan panjang nama.
Jadi ini akan menjadi penampan yang kita akan sprintf ke dalam.
>> Jadi apa JPEG fail nama panjang?
Di sini, kita lihat bahawa ia hash ditakrifkan sebagai lapan.
Jadi mengapa lapan?
Nah fail yang diberikan akan dinamakan sesuatu seperti sifar sifar sifar.
JPG dan kemudian kita memerlukan garis sendeng terbalik sifar.
Oleh itu, kita perlu penampan yang boleh menyimpan lapan aksara.
Sekarang kita akan mempunyai kaunter itulah akan mengesan
JPEG bilangan kami mendapati.
>> Dan akhirnya, kita akan mempunyai Fail JPEG yang mulanya null
yang akan menjadi pada masa ini fail terbuka yang kita menulis kepada.
Sekarang kita akan mempunyai penampan tambahan.
Ini tidak sama sebagai sprintf kami penampan buffer di mana ini adalah satu
bahawa kita membaca dalam data daripada kad dot mentah.
>> Jadi penimbal akan menjadi satu aksara tidak ditandatangani, yang anda boleh
pada dasarnya hanya merawat kita bait, dan ia akan menjadi saiz blok saiz
di mana, seperti yang kita memberitahu anda, saiz blok adalah 512.
Jadi JPEG anda boleh merawat segala-galanya sebagai blok sebanyak 512 bait.
>> Sekarang kita akan gelung atas seluruh fail.
Kami akan f membaca ke dalam buffer kami satu kali bait saiz blok dari
kad dot fail mentah.
Sekarang apakah f membaca kembali?
Ia mengembalikan bilangan item bahawa ia berjaya membaca.
Jadi, jika ia berjaya membaca 512 bait, maka kita mahu melihat sama ada ini adalah
JPEG atau menulis kepada fail JPEG.
Dan jika ia tidak kembali 512 bait, kemudian sama ada fail telah berakhir pada
mana kita akan keluar daripada y gelung, atau terdapat beberapa jenis kesilapan
di mana kita juga akan keluar daripada gelung y, tetapi kami akan mahu melaporkan
sesuatu yang pergi salah.
>> OK.
Jadi menganggap bahawa kami berjaya membaca dalam 512 bait, kita mahu cek pertama
untuk membuat yang bait ini yang kita hanya dibaca mula JPEG a.
Jadi jika adalah JPEG header penampan kami.
Sekarang apa yang header JPEG lakukan?
Mari kita lihat.
>> Di sini, kita lihat bahawa fungsi ini adalah kembali lembu jantan, dan lembu itu -
baik di sini, kita memeriksa untuk melihat jika header sifar sama malar ini dan
header satu sama malar ini dan header dua sama malar ini,
header tiga sama ini atau ini berterusan di mana semua ini adalah pemalar
hanya hash ditakrifkan di sini dan apa yang kita memberitahu anda di spec
yang JPEG bermula dengan.
Dan sebagainya fungsi ini hanya akan kembali benar jika penampan ini mewakili
permulaan JPEG baru dan palsu sebaliknya.
>> OK.
Jadi, jika ini tidak mewakili JPEG baru, maka kita pertama mahu untuk memeriksa untuk melihat jika
Fail JPEG tidak sama dengan nol, di mana kita menutupnya.
Dan jadi mengapa kita perlu menyemak untuk melihat jika ia tidak batal?
Nah JPEG yang pertama yang kita mendapati kita tidak akan sudah mempunyai
fail JPEG terbuka.
Dan sebagainya, jika kita cuba menutup itu, maka kita tidak melakukan sesuatu yang agak betul.
>> Tetapi setiap JPEG berikutnya yang kita terbuka, kita mahu untuk menutup
fail sebelumnya.
Jadi sekarang kita akan menggunakan sprintf seperti yang kita berkata sebelum ini di mana kami menggunakan
penampan JPEG nama fail.
Dan kita akan menggunakan fail JPEG namakan format sebagai format kami.
Dan apa yang itu?
Di sini, kita lihat bahawa ia adalah peratus sifar 3D.JPEG mana tiga sifar hanya
mengatakan bahawa kita akan menggunakan tiga integer untuk ini menokok-tambah dengan sifar.
Jadi ini adalah bagaimana kita akan mendapat sifar sifar one.JPEG dan sifar 10.JPEG dan sebagainya.
>> Kami akan menggunakan sprintf.
Dan integer bahawa kita memasukkan ke dalam tali adalah JPEG kebas
pulih, yang asalnya sifar.
Jadi fail pertama dibuka akan sifar sifar sifar dot JPEG.
Dan maka kita menokok ia jadi file seterusnya kita membuka sifar sifar
satu titik JPEG dan kami akan kenaikan ia lagi jadi ia akan menjadi sifar sifar dua dot
JPEG dan sebagainya.
>> Baiklah.
Jadi sekarang bahagian dalam fail JPEG menamakan, kita mempunyai nama
memfailkan yang kita mahu.
Kita boleh f membuka fail yang untuk menulis.
OK.
Dan sekali lagi, kita perlu periksa untuk memastikan bahawa fail berjaya
dibuka kerana jika ia tidak, kemudian terdapat beberapa kesilapan.
>> Jadi sekarang kita telah mendapat masa lalu adalah ini sebahagian JPEG.
Dan di sini, kita lihat kita akan untuk menulis kepada JPEG.
Tetapi kita mula-mula mempunyai semak ini yang mengatakan jika fail JPEG tidak sama null.
Mengapa kita memerlukan itu?
Nah fail JPEG sama null apabila kita kini mempunyai JPEG terbuka.
>> Bagaimana jika kad dot bermula mentah dengan sekumpulan bait yang
tidak mewakili JPEG?
Kemudian kita akan mahu skip ke atas bait.
Jika kita tidak mempunyai cek ini, maka kami akan menulis kepada belum dibuka
memfailkan 512 bytes pertama kad itu yang tidak baik.
OK.
>> Jadi dengan andaian kita mempunyai fail terbuka, maka kita akan menulis ke fail bahawa
512 bait yang kita ada dalam buffer kami.
Dan kami sekali lagi memeriksa untuk memastikan bahawa 512 bytes berjaya
ditulis kerana jika mereka tidak berjaya ditulis, maka sesuatu
yang salah.
Kami akan menutup fail, mencetak yang sesuatu yang salah, dan kembali.
Dengan mengandaikan semuanya berjalan dengan betul, kemudian kami akan terus menggelung menutup
file lama, membuka fail baru, penulisan data ke fail yang baru, dan sebagainya
sehingga akhirnya, f ini membaca kembali sifar yang cara
bahawa fail dilakukan.
>> Jadi sekarang bahawa membaca kad berakhir, kita melihat bahawa kita akan f menutup
Fail tersebut bahawa kami terbuka, tetapi kami memeriksa jika fail JPEG
tidak sama null.
Nah f penutupan masuk akal kerana sebagai kami membuka fail, kita menutup
fail sebelumnya, tetapi yang terakhir fail yang kita tidak pernah mendapat dibuka ditutup.
Jadi itulah yang ini lakukan.
>> Tetapi mengapa kita perlu menyemak for null?
Nah bagaimana jika kad dot mentah tidak mempunyai JPEG tunggal di dalamnya?
Dalam kes itu, kita akan mempunyai tidak pernah membuka fail.
Dan jika kita tidak pernah membuka fail, kita harus tidak cuba untuk menutup fail itu.
Jadi itulah yang semak ini lakukan.
>> Sekarang di sini, seperti yang saya katakan sebelum ini, kita boleh tercetus bahawa y gelung sama ada jika
kad telah berakhir atau jika terdapat beberapa kesilapan membaca dari kad.
Jadi ini adalah memeriksa untuk melihat jika terdapat kesilapan membaca dari kad, dalam
mana, kami akan mengatakan ada adalah bacaan kesilapan.
Kita tidak mahu pengguna untuk berfikir semuanya berjalan dengan jayanya.
Dan kita akan kembali satu untuk kesilapan.
>> Akhir sekali, kami akan f menutup fail mentah, kad kami dot mentah, untuk menunjukkan bahawa
semuanya berjalan dengan baik dan pulangan sifar dan itu sahaja.
>> Nama saya Rob dan ini adalah Pulih.
>> [MUZIK Bermain]