1 00:00:00,000 --> 00:00:00,494 2 00:00:00,494 --> 00:00:13,350 >> [MUZIK Bermain] 3 00:00:13,350 --> 00:00:14,080 >> ROB Bowden: Hi. 4 00:00:14,080 --> 00:00:17,550 Saya Rob, dan mari kita berharap penyelesaian ini membantu meletakkan anda 5 00:00:17,550 --> 00:00:19,600 di jalan raya untuk pemulihan. 6 00:00:19,600 --> 00:00:22,700 Jadi mari kita memulakan. 7 00:00:22,700 --> 00:00:25,660 >> Kita lihat bahawa segera kami hanya untuk memastikan bahawa kita 8 00:00:25,660 --> 00:00:27,170 menggunakan Pulih betul. 9 00:00:27,170 --> 00:00:31,490 Jadi penggunaan hanya perlu menjadi sesuatu seperti slash dot pulih. 10 00:00:31,490 --> 00:00:35,500 >> Sekarang kita akan membuka dijangka kad dot fail mentah. 11 00:00:35,500 --> 00:00:39,740 Kita lihat di sini bahawa kita menggunakan tetap garis bawah mentah nama fail, 12 00:00:39,740 --> 00:00:44,200 yang di sini kita mempunyai hash ditakrifkan sebagai kad dot mentah. 13 00:00:44,200 --> 00:00:45,030 OK. 14 00:00:45,030 --> 00:00:48,210 >> Oleh itu, kita perlu memastikan bahawa berjaya dibuka kerana jika ia 15 00:00:48,210 --> 00:00:51,150 tidak, maka kita harus memberi amaran kepada pengguna. 16 00:00:51,150 --> 00:00:56,770 Tetapi menganggap bahawa ia lakukan, kami kini akan mengisytiharkan penampan saiz JPEG 17 00:00:56,770 --> 00:00:58,170 memfailkan panjang nama. 18 00:00:58,170 --> 00:01:02,060 Jadi ini akan menjadi penampan yang kita akan sprintf ke dalam. 19 00:01:02,060 --> 00:01:04,360 >> Jadi apa JPEG fail nama panjang? 20 00:01:04,360 --> 00:01:08,490 Di sini, kita lihat bahawa ia hash ditakrifkan sebagai lapan. 21 00:01:08,490 --> 00:01:10,670 Jadi mengapa lapan? 22 00:01:10,670 --> 00:01:15,150 Nah fail yang diberikan akan dinamakan sesuatu seperti sifar sifar sifar. 23 00:01:15,150 --> 00:01:19,460 JPG dan kemudian kita memerlukan garis sendeng terbalik sifar. 24 00:01:19,460 --> 00:01:22,720 Oleh itu, kita perlu penampan yang boleh menyimpan lapan aksara. 25 00:01:22,720 --> 00:01:25,190 Sekarang kita akan mempunyai kaunter itulah akan mengesan 26 00:01:25,190 --> 00:01:27,780 JPEG bilangan kami mendapati. 27 00:01:27,780 --> 00:01:31,590 >> Dan akhirnya, kita akan mempunyai Fail JPEG yang mulanya null 28 00:01:31,590 --> 00:01:35,920 yang akan menjadi pada masa ini fail terbuka yang kita menulis kepada. 29 00:01:35,920 --> 00:01:37,540 Sekarang kita akan mempunyai penampan tambahan. 30 00:01:37,540 --> 00:01:41,350 Ini tidak sama sebagai sprintf kami penampan buffer di mana ini adalah satu 31 00:01:41,350 --> 00:01:45,020 bahawa kita membaca dalam data daripada kad dot mentah. 32 00:01:45,020 --> 00:01:48,900 >> Jadi penimbal akan menjadi satu aksara tidak ditandatangani, yang anda boleh 33 00:01:48,900 --> 00:01:53,560 pada dasarnya hanya merawat kita bait, dan ia akan menjadi saiz blok saiz 34 00:01:53,560 --> 00:01:57,950 di mana, seperti yang kita memberitahu anda, saiz blok adalah 512. 35 00:01:57,950 --> 00:02:03,070 Jadi JPEG anda boleh merawat segala-galanya sebagai blok sebanyak 512 bait. 36 00:02:03,070 --> 00:02:05,890 >> Sekarang kita akan gelung atas seluruh fail. 37 00:02:05,890 --> 00:02:12,980 Kami akan f membaca ke dalam buffer kami satu kali bait saiz blok dari 38 00:02:12,980 --> 00:02:14,710 kad dot fail mentah. 39 00:02:14,710 --> 00:02:16,630 Sekarang apakah f membaca kembali? 40 00:02:16,630 --> 00:02:20,050 Ia mengembalikan bilangan item bahawa ia berjaya membaca. 41 00:02:20,050 --> 00:02:27,310 Jadi, jika ia berjaya membaca 512 bait, maka kita mahu melihat sama ada ini adalah 42 00:02:27,310 --> 00:02:29,700 JPEG atau menulis kepada fail JPEG. 43 00:02:29,700 --> 00:02:34,450 Dan jika ia tidak kembali 512 bait, kemudian sama ada fail telah berakhir pada 44 00:02:34,450 --> 00:02:37,870 mana kita akan keluar daripada y gelung, atau terdapat beberapa jenis kesilapan 45 00:02:37,870 --> 00:02:40,300 di mana kita juga akan keluar daripada gelung y, tetapi kami akan mahu melaporkan 46 00:02:40,300 --> 00:02:41,990 sesuatu yang pergi salah. 47 00:02:41,990 --> 00:02:42,290 >> OK. 48 00:02:42,290 --> 00:02:47,630 Jadi menganggap bahawa kami berjaya membaca dalam 512 bait, kita mahu cek pertama 49 00:02:47,630 --> 00:02:53,070 untuk membuat yang bait ini yang kita hanya dibaca mula JPEG a. 50 00:02:53,070 --> 00:02:56,430 Jadi jika adalah JPEG header penampan kami. 51 00:02:56,430 --> 00:02:58,460 Sekarang apa yang header JPEG lakukan? 52 00:02:58,460 --> 00:03:00,120 Mari kita lihat. 53 00:03:00,120 --> 00:03:05,270 >> Di sini, kita lihat bahawa fungsi ini adalah kembali lembu jantan, dan lembu itu - 54 00:03:05,270 --> 00:03:08,820 baik di sini, kita memeriksa untuk melihat jika header sifar sama malar ini dan 55 00:03:08,820 --> 00:03:11,880 header satu sama malar ini dan header dua sama malar ini, 56 00:03:11,880 --> 00:03:15,640 header tiga sama ini atau ini berterusan di mana semua ini adalah pemalar 57 00:03:15,640 --> 00:03:20,340 hanya hash ditakrifkan di sini dan apa yang kita memberitahu anda di spec 58 00:03:20,340 --> 00:03:22,700 yang JPEG bermula dengan. 59 00:03:22,700 --> 00:03:27,300 Dan sebagainya fungsi ini hanya akan kembali benar jika penampan ini mewakili 60 00:03:27,300 --> 00:03:31,750 permulaan JPEG baru dan palsu sebaliknya. 61 00:03:31,750 --> 00:03:32,520 >> OK. 62 00:03:32,520 --> 00:03:38,490 Jadi, jika ini tidak mewakili JPEG baru, maka kita pertama mahu untuk memeriksa untuk melihat jika 63 00:03:38,490 --> 00:03:42,030 Fail JPEG tidak sama dengan nol, di mana kita menutupnya. 64 00:03:42,030 --> 00:03:44,940 Dan jadi mengapa kita perlu menyemak untuk melihat jika ia tidak batal? 65 00:03:44,940 --> 00:03:48,980 Nah JPEG yang pertama yang kita mendapati kita tidak akan sudah mempunyai 66 00:03:48,980 --> 00:03:50,440 fail JPEG terbuka. 67 00:03:50,440 --> 00:03:55,580 Dan sebagainya, jika kita cuba menutup itu, maka kita tidak melakukan sesuatu yang agak betul. 68 00:03:55,580 --> 00:03:59,090 >> Tetapi setiap JPEG berikutnya yang kita terbuka, kita mahu untuk menutup 69 00:03:59,090 --> 00:04:00,710 fail sebelumnya. 70 00:04:00,710 --> 00:04:04,630 Jadi sekarang kita akan menggunakan sprintf seperti yang kita berkata sebelum ini di mana kami menggunakan 71 00:04:04,630 --> 00:04:06,280 penampan JPEG nama fail. 72 00:04:06,280 --> 00:04:09,870 Dan kita akan menggunakan fail JPEG namakan format sebagai format kami. 73 00:04:09,870 --> 00:04:12,030 Dan apa yang itu? 74 00:04:12,030 --> 00:04:18,450 Di sini, kita lihat bahawa ia adalah peratus sifar 3D.JPEG mana tiga sifar hanya 75 00:04:18,450 --> 00:04:22,089 mengatakan bahawa kita akan menggunakan tiga integer untuk ini menokok-tambah dengan sifar. 76 00:04:22,089 --> 00:04:27,470 Jadi ini adalah bagaimana kita akan mendapat sifar sifar one.JPEG dan sifar 10.JPEG dan sebagainya. 77 00:04:27,470 --> 00:04:29,060 >> Kami akan menggunakan sprintf. 78 00:04:29,060 --> 00:04:33,760 Dan integer bahawa kita memasukkan ke dalam tali adalah JPEG kebas 79 00:04:33,760 --> 00:04:36,380 pulih, yang asalnya sifar. 80 00:04:36,380 --> 00:04:39,950 Jadi fail pertama dibuka akan sifar sifar sifar dot JPEG. 81 00:04:39,950 --> 00:04:43,330 Dan maka kita menokok ia jadi file seterusnya kita membuka sifar sifar 82 00:04:43,330 --> 00:04:46,830 satu titik JPEG dan kami akan kenaikan ia lagi jadi ia akan menjadi sifar sifar dua dot 83 00:04:46,830 --> 00:04:49,100 JPEG dan sebagainya. 84 00:04:49,100 --> 00:04:49,850 >> Baiklah. 85 00:04:49,850 --> 00:04:53,210 Jadi sekarang bahagian dalam fail JPEG menamakan, kita mempunyai nama 86 00:04:53,210 --> 00:04:54,990 memfailkan yang kita mahu. 87 00:04:54,990 --> 00:04:58,640 Kita boleh f membuka fail yang untuk menulis. 88 00:04:58,640 --> 00:04:59,170 OK. 89 00:04:59,170 --> 00:05:02,820 Dan sekali lagi, kita perlu periksa untuk memastikan bahawa fail berjaya 90 00:05:02,820 --> 00:05:08,460 dibuka kerana jika ia tidak, kemudian terdapat beberapa kesilapan. 91 00:05:08,460 --> 00:05:13,100 >> Jadi sekarang kita telah mendapat masa lalu adalah ini sebahagian JPEG. 92 00:05:13,100 --> 00:05:16,390 Dan di sini, kita lihat kita akan untuk menulis kepada JPEG. 93 00:05:16,390 --> 00:05:20,980 Tetapi kita mula-mula mempunyai semak ini yang mengatakan jika fail JPEG tidak sama null. 94 00:05:20,980 --> 00:05:22,490 Mengapa kita memerlukan itu? 95 00:05:22,490 --> 00:05:28,020 Nah fail JPEG sama null apabila kita kini mempunyai JPEG terbuka. 96 00:05:28,020 --> 00:05:31,870 >> Bagaimana jika kad dot bermula mentah dengan sekumpulan bait yang 97 00:05:31,870 --> 00:05:33,510 tidak mewakili JPEG? 98 00:05:33,510 --> 00:05:36,240 Kemudian kita akan mahu skip ke atas bait. 99 00:05:36,240 --> 00:05:39,600 Jika kita tidak mempunyai cek ini, maka kami akan menulis kepada belum dibuka 100 00:05:39,600 --> 00:05:45,540 memfailkan 512 bytes pertama kad itu yang tidak baik. 101 00:05:45,540 --> 00:05:46,030 OK. 102 00:05:46,030 --> 00:05:51,330 >> Jadi dengan andaian kita mempunyai fail terbuka, maka kita akan menulis ke fail bahawa 103 00:05:51,330 --> 00:05:53,290 512 bait yang kita ada dalam buffer kami. 104 00:05:53,290 --> 00:05:57,390 Dan kami sekali lagi memeriksa untuk memastikan bahawa 512 bytes berjaya 105 00:05:57,390 --> 00:06:01,140 ditulis kerana jika mereka tidak berjaya ditulis, maka sesuatu 106 00:06:01,140 --> 00:06:02,080 yang salah. 107 00:06:02,080 --> 00:06:06,540 Kami akan menutup fail, mencetak yang sesuatu yang salah, dan kembali. 108 00:06:06,540 --> 00:06:10,940 Dengan mengandaikan semuanya berjalan dengan betul, kemudian kami akan terus menggelung menutup 109 00:06:10,940 --> 00:06:15,060 file lama, membuka fail baru, penulisan data ke fail yang baru, dan sebagainya 110 00:06:15,060 --> 00:06:20,990 sehingga akhirnya, f ini membaca kembali sifar yang cara 111 00:06:20,990 --> 00:06:23,280 bahawa fail dilakukan. 112 00:06:23,280 --> 00:06:28,490 >> Jadi sekarang bahawa membaca kad berakhir, kita melihat bahawa kita akan f menutup 113 00:06:28,490 --> 00:06:33,250 Fail tersebut bahawa kami terbuka, tetapi kami memeriksa jika fail JPEG 114 00:06:33,250 --> 00:06:34,900 tidak sama null. 115 00:06:34,900 --> 00:06:39,520 Nah f penutupan masuk akal kerana sebagai kami membuka fail, kita menutup 116 00:06:39,520 --> 00:06:43,870 fail sebelumnya, tetapi yang terakhir fail yang kita tidak pernah mendapat dibuka ditutup. 117 00:06:43,870 --> 00:06:45,580 Jadi itulah yang ini lakukan. 118 00:06:45,580 --> 00:06:47,720 >> Tetapi mengapa kita perlu menyemak for null? 119 00:06:47,720 --> 00:06:53,130 Nah bagaimana jika kad dot mentah tidak mempunyai JPEG tunggal di dalamnya? 120 00:06:53,130 --> 00:06:56,640 Dalam kes itu, kita akan mempunyai tidak pernah membuka fail. 121 00:06:56,640 --> 00:07:00,230 Dan jika kita tidak pernah membuka fail, kita harus tidak cuba untuk menutup fail itu. 122 00:07:00,230 --> 00:07:03,000 Jadi itulah yang semak ini lakukan. 123 00:07:03,000 --> 00:07:07,880 >> Sekarang di sini, seperti yang saya katakan sebelum ini, kita boleh tercetus bahawa y gelung sama ada jika 124 00:07:07,880 --> 00:07:13,520 kad telah berakhir atau jika terdapat beberapa kesilapan membaca dari kad. 125 00:07:13,520 --> 00:07:16,680 Jadi ini adalah memeriksa untuk melihat jika terdapat kesilapan membaca dari kad, dalam 126 00:07:16,680 --> 00:07:19,400 mana, kami akan mengatakan ada adalah bacaan kesilapan. 127 00:07:19,400 --> 00:07:22,130 Kita tidak mahu pengguna untuk berfikir semuanya berjalan dengan jayanya. 128 00:07:22,130 --> 00:07:24,750 Dan kita akan kembali satu untuk kesilapan. 129 00:07:24,750 --> 00:07:29,580 >> Akhir sekali, kami akan f menutup fail mentah, kad kami dot mentah, untuk menunjukkan bahawa 130 00:07:29,580 --> 00:07:34,070 semuanya berjalan dengan baik dan pulangan sifar dan itu sahaja. 131 00:07:34,070 --> 00:07:36,130 >> Nama saya Rob dan ini adalah Pulih. 132 00:07:36,130 --> 00:07:42,102 >> [MUZIK Bermain]