1 00:00:00,000 --> 00:00:00,494 2 00:00:00,494 --> 00:00:13,350 >> [MUSIC CHƠI] 3 00:00:13,350 --> 00:00:14,080 >> ROB Bowden: Hi. 4 00:00:14,080 --> 00:00:17,550 Tôi Rob, và chúng ta hãy hy vọng rằng giải pháp này sẽ giúp đưa bạn 5 00:00:17,550 --> 00:00:19,600 trên con đường hồi phục. 6 00:00:19,600 --> 00:00:22,700 Vì vậy, chúng ta hãy bắt đầu. 7 00:00:22,700 --> 00:00:25,660 >> Chúng ta thấy rằng ngay lập tức chúng tôi chỉ để chắc chắn rằng chúng tôi 8 00:00:25,660 --> 00:00:27,170 Khôi phục bằng cách sử dụng một cách chính xác. 9 00:00:27,170 --> 00:00:31,490 Vì vậy, việc sử dụng chỉ nên được một cái gì đó như dấu chấm dấu gạch chéo hồi phục. 10 00:00:31,490 --> 00:00:35,500 >> Bây giờ chúng ta sẽ mở dự kiến thẻ dot file thô. 11 00:00:35,500 --> 00:00:39,740 Chúng ta thấy ở đây là chúng ta đang sử dụng tên file gạch thô không đổi, 12 00:00:39,740 --> 00:00:44,200 mà ở đây chúng ta có băm định nghĩa là thẻ dot liệu. 13 00:00:44,200 --> 00:00:45,030 OK. 14 00:00:45,030 --> 00:00:48,210 >> Vì vậy chúng tôi cần phải chắc chắn rằng mở thành công bởi vì nếu nó 15 00:00:48,210 --> 00:00:51,150 không, thì chúng ta nên cảnh báo người dùng. 16 00:00:51,150 --> 00:00:56,770 Nhưng giả định rằng nó đã làm, chúng tôi bây giờ sẽ khai báo một bộ đệm kích thước JPEG 17 00:00:56,770 --> 00:00:58,170 nộp chiều dài tên. 18 00:00:58,170 --> 00:01:02,060 Vì vậy, đây sẽ là bộ đệm mà chúng ta sẽ sprintf vào. 19 00:01:02,060 --> 00:01:04,360 >> Vì vậy, JPEG tập tin chiều dài tên là gì? 20 00:01:04,360 --> 00:01:08,490 Ở đây, chúng tôi thấy rằng nó băm xác định là tám. 21 00:01:08,490 --> 00:01:10,670 Vậy tại sao tám? 22 00:01:10,670 --> 00:01:15,150 Cũng một tập tin nhất định sẽ được đặt tên một cái gì đó như không không không. 23 00:01:15,150 --> 00:01:19,460 JPG và sau đó chúng ta cần một dấu gạch chéo ngược không. 24 00:01:19,460 --> 00:01:22,720 Vì vậy, chúng ta cần một bộ đệm mà có thể lưu trữ tám ký tự. 25 00:01:22,720 --> 00:01:25,190 Bây giờ chúng ta sẽ có một truy cập đó là sẽ theo dõi các 26 00:01:25,190 --> 00:01:27,780 JPEG số chúng tôi tìm thấy. 27 00:01:27,780 --> 00:01:31,590 >> Và cuối cùng, chúng ta sẽ có một Tập tin JPEG mà ban đầu rỗng 28 00:01:31,590 --> 00:01:35,920 mà là có được hiện nay mở tập tin mà chúng tôi muốn gửi đến. 29 00:01:35,920 --> 00:01:37,540 Bây giờ chúng ta sẽ có một bộ đệm bổ sung. 30 00:01:37,540 --> 00:01:41,350 Điều này không giống như sprintf của chúng tôi đệm mà bộ đệm này là một trong những 31 00:01:41,350 --> 00:01:45,020 mà chúng ta đang đọc trong các dữ liệu từ thẻ dot liệu. 32 00:01:45,020 --> 00:01:48,900 >> Vì vậy, các bộ đệm là có được của ký tự không dấu, mà bạn có thể 33 00:01:48,900 --> 00:01:53,560 về cơ bản chỉ đối xử với chúng byte, và nó sẽ có kích cỡ kích thước khối 34 00:01:53,560 --> 00:01:57,950 ở đâu, khi chúng tôi nói với bạn, kích thước khối là 512. 35 00:01:57,950 --> 00:02:03,070 Vì vậy, hình ảnh JPEG, bạn có thể xử lý tất cả mọi thứ như các khối 512 byte. 36 00:02:03,070 --> 00:02:05,890 >> Bây giờ chúng ta sẽ lặp trên toàn bộ tập tin. 37 00:02:05,890 --> 00:02:12,980 Chúng ta sẽ e đọc vào bộ đệm của chúng tôi một đơn lần kích thước khối byte từ 38 00:02:12,980 --> 00:02:14,710 thẻ dot file thô. 39 00:02:14,710 --> 00:02:16,630 Bây giờ những gì e đọc trở lại? 40 00:02:16,630 --> 00:02:20,050 Nó trả về số lượng các mục mà nó đọc thành công. 41 00:02:20,050 --> 00:02:27,310 Vì vậy, nếu nó được quản lý để đọc 512 byte, sau đó chúng tôi muốn xem liệu đây là một 42 00:02:27,310 --> 00:02:29,700 JPEG hoặc viết nó vào một tập tin JPEG. 43 00:02:29,700 --> 00:02:34,450 Và nếu nó không trở về 512 byte, sau đó, hoặc các tập tin đã kết thúc trong 44 00:02:34,450 --> 00:02:37,870 trường hợp này chúng tôi sẽ thoát ra khỏi y vòng lặp, hoặc có một số loại lỗi 45 00:02:37,870 --> 00:02:40,300 trong trường hợp này chúng tôi cũng sẽ thoát ra khỏi vòng lặp y, nhưng chúng tôi sẽ muốn báo cáo 46 00:02:40,300 --> 00:02:41,990 một cái gì đó đã đi sai. 47 00:02:41,990 --> 00:02:42,290 >> OK. 48 00:02:42,290 --> 00:02:47,630 Vì vậy, giả định rằng chúng ta đọc thành công trong 512 byte, chúng tôi muốn kiểm tra đầu tiên 49 00:02:47,630 --> 00:02:53,070 để làm cho rằng các byte chúng ta chỉ cần đọc trong bắt đầu một JPEG. 50 00:02:53,070 --> 00:02:56,430 Vì vậy, nếu là JPEG tiêu đề của bộ đệm của chúng tôi. 51 00:02:56,430 --> 00:02:58,460 Bây giờ những gì nó được JPEG tiêu đề làm gì? 52 00:02:58,460 --> 00:03:00,120 Chúng ta hãy nhìn. 53 00:03:00,120 --> 00:03:05,270 >> Ở đây, chúng ta thấy rằng chức năng này trở về một con bò, và con bò - 54 00:03:05,270 --> 00:03:08,820 cũng ở đây, chúng tôi đang kiểm tra để xem nếu tiêu đề không bằng liên tục này và 55 00:03:08,820 --> 00:03:11,880 tiêu đề một là liên tục này và tiêu đề hai bằng liên tục này, 56 00:03:11,880 --> 00:03:15,640 tiêu đề ba bằng này hay này liên tục, nơi tất cả các hằng số 57 00:03:15,640 --> 00:03:20,340 chỉ băm được xác định ngay tại đây và là chính xác những gì chúng tôi đã nói với bạn trong spec 58 00:03:20,340 --> 00:03:22,700 rằng một JPEG bắt đầu với. 59 00:03:22,700 --> 00:03:27,300 Và do đó chức năng này chỉ cần đi return true nếu bộ đệm này đại diện cho 60 00:03:27,300 --> 00:03:31,750 khởi đầu của một JPEG mới và sai khác. 61 00:03:31,750 --> 00:03:32,520 >> OK. 62 00:03:32,520 --> 00:03:38,490 Vì vậy, nếu điều này không đại diện cho một JPEG mới, sau đó chúng tôi đầu tiên muốn kiểm tra xem 63 00:03:38,490 --> 00:03:42,030 JPEG không bằng null, trong trường hợp này chúng tôi đóng nó lại. 64 00:03:42,030 --> 00:03:44,940 Và vì vậy tại sao chúng ta cần phải kiểm tra để xem nếu nó không phải là vô giá trị? 65 00:03:44,940 --> 00:03:48,980 Cũng JPEG đầu tiên mà chúng tôi tìm thấy chúng tôi sẽ chưa có 66 00:03:48,980 --> 00:03:50,440 một tập tin JPEG mở. 67 00:03:50,440 --> 00:03:55,580 Và như vậy, nếu chúng ta cố gắng để đóng, sau đó chúng ta không làm một cái gì đó hoàn toàn đúng. 68 00:03:55,580 --> 00:03:59,090 >> Nhưng mỗi JPEG sau đó chúng tôi mở, chúng tôi muốn đóng 69 00:03:59,090 --> 00:04:00,710 các tập tin trước đó. 70 00:04:00,710 --> 00:04:04,630 Vì vậy, bây giờ chúng ta sẽ sử dụng sprintf như chúng tôi cho biết trước khi mà chúng ta đang sử dụng 71 00:04:04,630 --> 00:04:06,280 tên tập tin đệm JPEG. 72 00:04:06,280 --> 00:04:09,870 Và chúng ta sẽ sử dụng tập tin JPEG tên định dạng như định dạng của chúng tôi. 73 00:04:09,870 --> 00:04:12,030 Và đó là những gì? 74 00:04:12,030 --> 00:04:18,450 Ở đây, chúng ta thấy rằng nó là phần trăm không 3D.JPEG nơi không ba chỉ 75 00:04:18,450 --> 00:04:22,089 nói rằng chúng ta sẽ sử dụng ba số nguyên cho điều này đệm bằng số không. 76 00:04:22,089 --> 00:04:27,470 Vì vậy, đây là cách chúng tôi sẽ không không one.JPEG và không 10.JPEG và như vậy. 77 00:04:27,470 --> 00:04:29,060 >> Chúng ta sẽ sử dụng sprintf. 78 00:04:29,060 --> 00:04:33,760 Và các số nguyên mà chúng ta đang chèn vào chuỗi là hình ảnh JPEG tê 79 00:04:33,760 --> 00:04:36,380 phục hồi, đó là ban đầu không. 80 00:04:36,380 --> 00:04:39,950 Vì vậy, các tập tin đầu tiên mở ra sẽ bằng không không không chấm JPEG. 81 00:04:39,950 --> 00:04:43,330 Và sau đó chúng ta cách tăng nó để ảnh tiếp theo chúng ta mở sẽ không không 82 00:04:43,330 --> 00:04:46,830 một dấu chấm JPEG và chúng tôi sẽ tăng nó một lần nữa để nó sẽ là số không không hai chấm 83 00:04:46,830 --> 00:04:49,100 JPEG và như vậy. 84 00:04:49,100 --> 00:04:49,850 >> Được rồi. 85 00:04:49,850 --> 00:04:53,210 Vì vậy, bây giờ bên trong tập tin JPEG tên, chúng tôi có tên của 86 00:04:53,210 --> 00:04:54,990 tập tin mà chúng ta muốn. 87 00:04:54,990 --> 00:04:58,640 Chúng ta có thể e mở tập tin cho văn bản. 88 00:04:58,640 --> 00:04:59,170 OK. 89 00:04:59,170 --> 00:05:02,820 Và một lần nữa, chúng ta cần phải kiểm tra để chắc đảm bảo rằng các tập tin thành công 90 00:05:02,820 --> 00:05:08,460 mở vì nếu nó không, sau đó đã có một số lỗi. 91 00:05:08,460 --> 00:05:13,100 >> Vì vậy, bây giờ chúng tôi đã nhận được quá khứ đây là một phần JPEG. 92 00:05:13,100 --> 00:05:16,390 Và ở đây, chúng ta thấy chúng ta đang đi viết thư cho JPEG. 93 00:05:16,390 --> 00:05:20,980 Nhưng trước tiên chúng ta kiểm tra này mà nói nếu tập tin JPEG không làm vô giá trị như nhau. 94 00:05:20,980 --> 00:05:22,490 Tại sao chúng ta cần điều đó? 95 00:05:22,490 --> 00:05:28,020 Cũng tập tin JPEG bằng vô giá trị khi chúng ta hiện đang có một JPEG mở. 96 00:05:28,020 --> 00:05:31,870 >> Nếu bắt đầu thẻ dot liệu với một loạt các byte 97 00:05:31,870 --> 00:05:33,510 không đại diện cho một JPEG? 98 00:05:33,510 --> 00:05:36,240 Sau đó chúng ta sẽ muốn bỏ qua những byte. 99 00:05:36,240 --> 00:05:39,600 Nếu chúng ta không có kiểm tra này, sau đó chúng tôi sẽ viết cho một chưa mở 100 00:05:39,600 --> 00:05:45,540 nộp 512 byte đầu tiên của thẻ đó là không tốt. 101 00:05:45,540 --> 00:05:46,030 OK. 102 00:05:46,030 --> 00:05:51,330 >> Vì vậy, giả sử chúng ta có một tập tin mở, sau đó chúng ta sẽ ghi vào tập tin rằng 103 00:05:51,330 --> 00:05:53,290 512 byte mà chúng tôi có trong bộ đệm của chúng tôi. 104 00:05:53,290 --> 00:05:57,390 Và chúng tôi một lần nữa kiểm tra để chắc chắc chắn rằng 512 byte thành công 105 00:05:57,390 --> 00:06:01,140 được viết bởi vì nếu họ không viết thành công, sau đó một cái gì đó 106 00:06:01,140 --> 00:06:02,080 đã đi sai. 107 00:06:02,080 --> 00:06:06,540 Chúng tôi sẽ đóng cửa các tập tin của chúng tôi, mà in một cái gì đó đã đi sai, và ngược lại. 108 00:06:06,540 --> 00:06:10,940 Giả sử tất cả mọi thứ đi đúng, sau đó chúng tôi sẽ tiếp tục lặp đóng 109 00:06:10,940 --> 00:06:15,060 tập tin cũ, mở các tập tin mới, bằng văn bản dữ liệu vào tập tin mới, và như vậy 110 00:06:15,060 --> 00:06:20,990 cho đến khi cuối cùng, e đã xem trả về số không mà phương tiện 111 00:06:20,990 --> 00:06:23,280 rằng các tập tin được thực hiện. 112 00:06:23,280 --> 00:06:28,490 >> Vì vậy, bây giờ mà đọc thẻ kết thúc, chúng tôi thấy rằng chúng tôi đang đi để e đóng 113 00:06:28,490 --> 00:06:33,250 tập tin mới nhất mà chúng tôi đã mở, nhưng chúng tôi đang kiểm tra nếu tập tin JPEG 114 00:06:33,250 --> 00:06:34,900 không vô không bằng nhau. 115 00:06:34,900 --> 00:06:39,520 Cũng f gần có ý nghĩa bởi vì như chúng tôi đang mở các tập tin, chúng tôi đang đóng cửa 116 00:06:39,520 --> 00:06:43,870 các tập tin trước đó, nhưng cuối cùng tập tin mà chúng tôi không bao giờ mở được đóng lại. 117 00:06:43,870 --> 00:06:45,580 Vì vậy, đó là những gì đang thực hiện. 118 00:06:45,580 --> 00:06:47,720 >> Nhưng tại sao chúng ta cần phải kiểm tra null? 119 00:06:47,720 --> 00:06:53,130 Tốt những gì nếu thẻ dot liệu không có một JPEG duy nhất bên trong của nó? 120 00:06:53,130 --> 00:06:56,640 Trong trường hợp đó, chúng ta sẽ có không bao giờ mở một tập tin. 121 00:06:56,640 --> 00:07:00,230 Và nếu chúng ta không bao giờ mở một tập tin, chúng ta nên không cố gắng để đóng tập tin đó. 122 00:07:00,230 --> 00:07:03,000 Vì vậy, đó là những gì kiểm tra này được thực hiện. 123 00:07:03,000 --> 00:07:07,880 >> Bây giờ ở đây, như tôi đã nói, chúng tôi có thể đã bị phá vỡ ra rằng vòng lặp y, hoặc nếu 124 00:07:07,880 --> 00:07:13,520 thẻ đã kết thúc hoặc nếu có một số lỗi đọc từ thẻ. 125 00:07:13,520 --> 00:07:16,680 Vì vậy, đây được kiểm tra để xem nếu có một lỗi đọc từ thẻ, trong 126 00:07:16,680 --> 00:07:19,400 trường hợp này, chúng tôi sẽ nói có là một đọc lỗi. 127 00:07:19,400 --> 00:07:22,130 Chúng tôi không muốn người dùng phải suy nghĩ tất cả mọi thứ đã thành công. 128 00:07:22,130 --> 00:07:24,750 Và chúng tôi sẽ trở lại một cho lỗi. 129 00:07:24,750 --> 00:07:29,580 >> Cuối cùng, chúng tôi sẽ đóng tập tin f liệu của chúng tôi, thẻ của chúng tôi dot liệu, để chỉ ra rằng 130 00:07:29,580 --> 00:07:34,070 tất cả mọi thứ diễn ra tốt đẹp và trở lại bằng không và đó là nó. 131 00:07:34,070 --> 00:07:36,130 >> Tên tôi là Rob và điều này đã phục hồi. 132 00:07:36,130 --> 00:07:42,102 >> [MUSIC CHƠI]