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