[MUSIC CHƠI] ROB Bowden: Hi. 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 trên con đường hồi phục. Vì vậy, chúng ta hãy bắt đầu. 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 Khôi phục bằng cách sử dụng một cách chính xác. 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. Bây giờ chúng ta sẽ mở dự kiến thẻ dot file thô. Chúng ta thấy ở đây là chúng ta đang sử dụng tên file gạch thô không đổi, mà ở đây chúng ta có băm định nghĩa là thẻ dot liệu. OK. 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ó không, thì chúng ta nên cảnh báo người dùng. 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 nộp chiều dài tên. Vì vậy, đây sẽ là bộ đệm mà chúng ta sẽ sprintf vào. Vì vậy, JPEG tập tin chiều dài tên là gì? Ở đây, chúng tôi thấy rằng nó băm xác định là tám. Vậy tại sao tám? 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. JPG và sau đó chúng ta cần một dấu gạch chéo ngược không. Vì vậy, chúng ta cần một bộ đệm mà có thể lưu trữ tám ký tự. Bây giờ chúng ta sẽ có một truy cập đó là sẽ theo dõi các JPEG số chúng tôi tìm thấy. Và cuối cùng, chúng ta sẽ có một Tập tin JPEG mà ban đầu rỗng mà là có được hiện nay mở tập tin mà chúng tôi muốn gửi đến. Bây giờ chúng ta sẽ có một bộ đệm bổ sung. Đ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 mà chúng ta đang đọc trong các dữ liệu từ thẻ dot liệu. Vì vậy, các bộ đệm là có được của ký tự không dấu, mà bạn có thể 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 ở đâu, khi chúng tôi nói với bạn, kích thước khối là 512. 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. Bây giờ chúng ta sẽ lặp trên toàn bộ tập tin. 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ừ thẻ dot file thô. Bây giờ những gì e đọc trở lại? Nó trả về số lượng các mục mà nó đọc thành công. 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 JPEG hoặc viết nó vào một tập tin JPEG. Và nếu nó không trở về 512 byte, sau đó, hoặc các tập tin đã kết thúc trong 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 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 một cái gì đó đã đi sai. OK. 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 để làm cho rằng các byte chúng ta chỉ cần đọc trong bắt đầu một JPEG. Vì vậy, nếu là JPEG tiêu đề của bộ đệm của chúng tôi. Bây giờ những gì nó được JPEG tiêu đề làm gì? Chúng ta hãy nhìn. Ở đây, chúng ta thấy rằng chức năng này trở về một con bò, và con bò - 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à tiêu đề một là liên tục này và tiêu đề hai bằng liên tục này, tiêu đề ba bằng này hay này liên tục, nơi tất cả các hằng số 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 rằng một JPEG bắt đầu với. Và do đó chức năng này chỉ cần đi return true nếu bộ đệm này đại diện cho khởi đầu của một JPEG mới và sai khác. OK. 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 JPEG không bằng null, trong trường hợp này chúng tôi đóng nó lại. 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ị? Cũng JPEG đầu tiên mà chúng tôi tìm thấy chúng tôi sẽ chưa có một tập tin JPEG mở. 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. Nhưng mỗi JPEG sau đó chúng tôi mở, chúng tôi muốn đóng các tập tin trước đó. 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 tên tập tin đệm JPEG. 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. Và đó là những gì? Ở đây, chúng ta thấy rằng nó là phần trăm không 3D.JPEG nơi không ba chỉ 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. 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. Chúng ta sẽ sử dụng sprintf. Và các số nguyên mà chúng ta đang chèn vào chuỗi là hình ảnh JPEG tê phục hồi, đó là ban đầu không. 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. Và sau đó chúng ta cách tăng nó để ảnh tiếp theo chúng ta mở sẽ không không 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 JPEG và như vậy. Được rồi. Vì vậy, bây giờ bên trong tập tin JPEG tên, chúng tôi có tên của tập tin mà chúng ta muốn. Chúng ta có thể e mở tập tin cho văn bản. OK. 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 mở vì nếu nó không, sau đó đã có một số lỗi. Vì vậy, bây giờ chúng tôi đã nhận được quá khứ đây là một phần JPEG. Và ở đây, chúng ta thấy chúng ta đang đi viết thư cho JPEG. 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. Tại sao chúng ta cần điều đó? Cũng tập tin JPEG bằng vô giá trị khi chúng ta hiện đang có một JPEG mở. Nếu bắt đầu thẻ dot liệu với một loạt các byte không đại diện cho một JPEG? Sau đó chúng ta sẽ muốn bỏ qua những byte. 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ở nộp 512 byte đầu tiên của thẻ đó là không tốt. OK. 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 512 byte mà chúng tôi có trong bộ đệm của chúng tôi. 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 được viết bởi vì nếu họ không viết thành công, sau đó một cái gì đó đã đi sai. 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. Giả sử tất cả mọi thứ đi đúng, sau đó chúng tôi sẽ tiếp tục lặp đóng 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 cho đến khi cuối cùng, e đã xem trả về số không mà phương tiện rằng các tập tin được thực hiện. 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 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 không vô không bằng nhau. 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 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. Vì vậy, đó là những gì đang thực hiện. Nhưng tại sao chúng ta cần phải kiểm tra null? 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ó? Trong trường hợp đó, chúng ta sẽ có không bao giờ mở một tập tin. 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 đó. Vì vậy, đó là những gì kiểm tra này được thực hiện. 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 thẻ đã kết thúc hoặc nếu có một số lỗi đọc từ thẻ. Vì vậy, đây được kiểm tra để xem nếu có một lỗi đọc từ thẻ, trong trường hợp này, chúng tôi sẽ nói có là một đọc lỗi. 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. Và chúng tôi sẽ trở lại một cho lỗi. 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 tất cả mọi thứ diễn ra tốt đẹp và trở lại bằng không và đó là nó. Tên tôi là Rob và điều này đã phục hồi. [MUSIC CHƠI]