1 00:00:00,000 --> 00:00:09,780 >> [عزف الموسيقى] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA تشان: دعونا معالجة استرداد. 3 00:00:11,150 --> 00:00:14,030 استرداد بلدي هو على الارجح PSET المفضلة، ويرجع ذلك أساسا أعتقد أنه من 4 00:00:14,030 --> 00:00:15,650 حقا، حقا بارد. 5 00:00:15,650 --> 00:00:19,040 في الأساس، وأنت أعطيت الذاكرة ملف البطاقة التي 6 00:00:19,040 --> 00:00:20,900 تم حذف الصور. 7 00:00:20,900 --> 00:00:23,650 ولكن ماذا كنت تريد الذهاب ل القيام به هو استعادة كل منهم. 8 00:00:23,650 --> 00:00:24,250 >> موافق. 9 00:00:24,250 --> 00:00:28,230 لذلك فمن المثير حقا، ولكن ربما تخويف قليلا، لأنك 10 00:00:28,230 --> 00:00:32,430 نظرا ملف C فارغة و لديك لملء فيها. 11 00:00:32,430 --> 00:00:36,250 موافق، لذلك دعونا كسر هذه إلى أجزاء يمكن التحكم فيها. 12 00:00:36,250 --> 00:00:38,160 فأنت تريد لفتح ملف بطاقة الذاكرة. 13 00:00:38,160 --> 00:00:39,900 الذي يبدو بسيطا بما فيه الكفاية. 14 00:00:39,900 --> 00:00:43,030 ثم، والعثور على بداية من صورة JPG. 15 00:00:43,030 --> 00:00:46,740 جميع الملفات الموجودة على هذه الذاكرة بطاقة ستكون JPGS. 16 00:00:46,740 --> 00:00:50,840 ثم، وعندما تجد بداية، وأنت تسير لفتح JPG الجديدة، التي 17 00:00:50,840 --> 00:00:57,610 هو، مثل، إنشاء JPG، وإرسال 512 بايت في وقت حتى JPG الجديد 18 00:00:57,610 --> 00:01:02,930 وجدت، ووضع حد للبرنامج، مرة واحدة كنت كشف عن نهاية الملف. 19 00:01:02,930 --> 00:01:06,400 >> الخطوات الأولى لذلك الأول هو لفتح ملف بطاقة الذاكرة. 20 00:01:06,400 --> 00:01:09,850 ولكن هل تعرف هذا فعلا، وليس هناك ملف I / O وظيفة أن يحدث ل 21 00:01:09,850 --> 00:01:12,030 تكون مفيدة جدا. 22 00:01:12,030 --> 00:01:12,820 موافق. 23 00:01:12,820 --> 00:01:14,760 فما هي JPGS؟ 24 00:01:14,760 --> 00:01:16,330 لأننا في حاجة إلى بداية ذلك. 25 00:01:16,330 --> 00:01:21,310 حسنا، JPGS، تماما مثل خرائط قليلا، هي مجرد تسلسل بايت. 26 00:01:21,310 --> 00:01:30,660 لحسن الحظ، يبدأ كل JPG مع أي عشرية 0xFF، 0xd8، عشرية 0xFF، 0xe0، سلسلة واحدة 27 00:01:30,660 --> 00:01:33,610 من بايت، أو آخر تسلسل بايت. 28 00:01:33,610 --> 00:01:37,250 >> حتى أولئك بايت أربعة تشير بداية JPG. 29 00:01:37,250 --> 00:01:40,780 سوى تلك المجموعات اثنين أربعة بايت. 30 00:01:40,780 --> 00:01:44,840 ولحسن الحظ بالنسبة لنا، وحقيقة أخرى أننا يمكن الاستفادة من هي أن كل 31 00:01:44,840 --> 00:01:48,550 يتم تخزين JPG جنبا إلى جنب على بطاقة الذاكرة. 32 00:01:48,550 --> 00:01:52,210 لقد مثلت بنية بطاقة الذاكرة تخطيطي على هذا 33 00:01:52,210 --> 00:01:53,310 الشريحة هنا. 34 00:01:53,310 --> 00:01:59,270 هنا، في كل مربع، كل مستطيل، يمثل 512 بايت، ويبدأ 35 00:01:59,270 --> 00:02:01,750 مع الرمادي في أننا لا لديها حقا JPG. 36 00:02:01,750 --> 00:02:05,700 >> ولكن بعد ذلك نحن ضرب أخيرا كتلة مع نجم. 37 00:02:05,700 --> 00:02:10,940 وهذا يعني أن وحدات البايت الأربعة الأولى من تلك هي واحدة من 512 هذين 38 00:02:10,940 --> 00:02:13,230 بدءا من تسلسل JPG. 39 00:02:13,230 --> 00:02:17,340 ونذهب من هناك، ثم مرة واحدة JPG واحد ينتهي، يبدأ واحد القادم. 40 00:02:17,340 --> 00:02:20,990 ليس لدينا أي وقت مضى أي أكثر الفضاء الرمادي في ما بينهما. 41 00:02:20,990 --> 00:02:25,550 >> ولكن كيف نقرأ هذا الواقع، و قراءة بايت 512 حتى نتمكن من جعل 42 00:02:25,550 --> 00:02:27,500 المقارنة المقام الأول؟ 43 00:02:27,500 --> 00:02:33,470 حسنا، دعونا نعود إلى fread، التي يأخذ في البنية التي سوف تحتوي على 44 00:02:33,470 --> 00:02:34,470 وحدات البايت التي كنت تقرأ. 45 00:02:34,470 --> 00:02:36,570 حتى وأنت تسير لوضع تلك في هناك - 46 00:02:36,570 --> 00:02:42,192 حجم، عدد، ثم inpointer ان كنت تقرأ من. 47 00:02:42,192 --> 00:02:49,900 الآن، ونحن نريد لقراءة 512 في وقت واحد، و نحن نريد لتخزين هذه في منطقة عازلة، 48 00:02:49,900 --> 00:02:50,700 أنا ذاهب إلى نسميها. 49 00:02:50,700 --> 00:02:54,100 >> في الأساس، ونحن في طريقنا لعقد على تلك بايت 512 والقيام 50 00:02:54,100 --> 00:02:55,500 الأمور معها، أليس كذلك؟ 51 00:02:55,500 --> 00:02:58,260 نحن إما ذاهب لمقارنة الأولى أربعة بايت، أو نحن في طريقنا لل 52 00:02:58,260 --> 00:02:59,830 قراءة في، موافق؟ 53 00:02:59,830 --> 00:03:05,050 حتى ذلك الحين سوف مؤشر البيانات ثم بمثابة المخزن المؤقت الخاص بك، و 54 00:03:05,050 --> 00:03:07,745 inpointer، حسنا، هذا مجرد الذهاب أن تكون بطاقة الذاكرة الخاصة بك. 55 00:03:07,745 --> 00:03:09,500 >> دعم لبطاقة الذاكرة لدينا التخطيطي. 56 00:03:09,500 --> 00:03:14,690 ونحن في طريقنا إلى قراءة 512 بايت في كل مرة، تخزين كل كتلة 512 بايت 57 00:03:14,690 --> 00:03:19,190 في المخزن مؤقت، وعقد على تلك العازلة، تلك بايت 512، حتى ونحن نعلم 58 00:03:19,190 --> 00:03:22,000 بالضبط ما يجب القيام به لهم. 59 00:03:22,000 --> 00:03:25,960 حتى بداية ليس أي شيء، لذلك سنقوم قراءة العازلة، مقارنتها، و 60 00:03:25,960 --> 00:03:28,160 نحن لن تحتاج إلى القيام بأي شيء معها. 61 00:03:28,160 --> 00:03:32,030 وبعد ذلك، ونحن في النهاية ضرب نجم منع، وهذا يعني أن لدينا 62 00:03:32,030 --> 00:03:33,630 العثور على أول JPG لدينا. 63 00:03:33,630 --> 00:03:36,560 وبالتالي فإن عقد العازلة الآن بايت من أن JPG. 64 00:03:36,560 --> 00:03:40,220 >> في المرة القادمة 512 بايت، لأنهم ليس كتلة النجم، هي أيضا 65 00:03:40,220 --> 00:03:41,740 جزء من تلك JPG. 66 00:03:41,740 --> 00:03:47,630 وJPGS مستمرة من هناك على في، إلى أن تصل إلى JPG المقبل. 67 00:03:47,630 --> 00:03:51,880 ثم المخزن المؤقت ثم يحمل 512 بايت لذلك JPG، و 68 00:03:51,880 --> 00:03:53,580 هلم جرا، وهكذا دواليك. 69 00:03:53,580 --> 00:03:54,250 موافق. 70 00:03:54,250 --> 00:03:58,980 >> وذلك بمجرد ضرب أول نجمة كتلة، أول JPG، كيف 71 00:03:58,980 --> 00:04:01,910 في الواقع، حسنا، فتحه؟ 72 00:04:01,910 --> 00:04:04,990 دعونا جعل JPG جديدة. 73 00:04:04,990 --> 00:04:08,846 أسماء الملفات لJPG ذاهبون ل يكون في الشكل، العدد، العدد، 74 00:04:08,846 --> 00:04:13,830 number.jpg، في انهم وردت أسماؤهم في الترتيب الذي وجدوا، 75 00:04:13,830 --> 00:04:14,780 ابتداء من الساعة 0. 76 00:04:14,780 --> 00:04:19,890 >> وبالتالي فإن JPG الأولى التي تقوم فيها سيتم 000.JPG العثور عليها. 77 00:04:19,890 --> 00:04:26,560 لذلك، ربما يكون فكرة جيدة للحفاظ على المسار كيف العديد من JPGS كنت قد وجدت حتى الآن. 78 00:04:26,560 --> 00:04:27,610 لذلك هذا هو اسم الملف. 79 00:04:27,610 --> 00:04:29,660 ولكن كيف يمكن في الواقع جعل ذلك؟ 80 00:04:29,660 --> 00:04:34,310 حسنا، نحن ذاهبون الى استخدام وظيفة تسمى sprintf. 81 00:04:34,310 --> 00:04:38,260 قليلا مماثلة لprintf، حيث يمكنك استخدام العناصر النائبة عن سلاسل، 82 00:04:38,260 --> 00:04:42,420 إلا في هذه الحالة، سوف sprintf طباعة ملف للخروج الى التيار 83 00:04:42,420 --> 00:04:45,550 الدليل، وليس في المحطة. 84 00:04:45,550 --> 00:04:46,120 >> موافق. 85 00:04:46,120 --> 00:04:49,950 حتى هنا نرى أن لدينا العنوان، مجموعة شار الذي سيخزن 86 00:04:49,950 --> 00:04:55,120 السلسلة الناتجة، ونحن نمر في عنوان السلسلة الفعلية مع 87 00:04:55,120 --> 00:04:58,720 نائب، مثلما كنا تعلمت أن تفعل مع printf. 88 00:04:58,720 --> 00:05:05,530 ولكن هذا الرمز أن لدي هنا سيعطي 2.JPG، وليس 002.JPG. 89 00:05:05,530 --> 00:05:09,920 لذلك سأترك لكم لمعرفة كيفية تعديل نائبا لجعل 90 00:05:09,920 --> 00:05:11,920 الاسم الصحيح. 91 00:05:11,920 --> 00:05:12,610 >> موافق. 92 00:05:12,610 --> 00:05:17,390 ذلك مرة واحدة كنت قد sprintf'd ثم يمكنك فتح هذا الملف، لأنه موجود في 93 00:05:17,390 --> 00:05:22,690 الدليل الخاص بك، مع الدالة fopen، وذلك باستخدام العنوان، ثم وضع كل ما تريد 94 00:05:22,690 --> 00:05:25,140 لفتح هذا الملف فيه. 95 00:05:25,140 --> 00:05:30,260 وحتى الآن بعد أن قمنا فتح ملف JPG جديدة، الآن يمكن أن نكتب 512 بايت في 96 00:05:30,260 --> 00:05:33,320 الوقت، حتى يتم العثور على JPG جديدة. 97 00:05:33,320 --> 00:05:36,640 لذلك دعونا نلقي نظرة أخرى في بناء جملة fwrite. 98 00:05:36,640 --> 00:05:40,060 >> وأنا أعلم أنني تظهر هذه الشريحة ل الكثير، ولكن أريد فقط للتأكد من أن 99 00:05:40,060 --> 00:05:43,530 يا رفاق لا يحصل الخلط جدا، لأن وأنا أعلم أنه من السهل جدا ل 100 00:05:43,530 --> 00:05:47,000 خلط الأول والأخير حجة، على وجه الخصوص. 101 00:05:47,000 --> 00:05:54,390 ولكن تذكر أن كنت تكتب من العازلة الخاص بك إلى ملف الصور بها. 102 00:05:54,390 --> 00:05:59,250 >> الآن بعد أن تعرف كيف الكتابة 512 بايت في ملف JPG الخاص بك الذي كنت قد 103 00:05:59,250 --> 00:06:03,230 خلق، حسنا، نحن نريد أن يتوقفوا عن هذه العملية مرة واحدة أننا وصلنا إلى نهاية 104 00:06:03,230 --> 00:06:06,720 بطاقة لدينا، لأنه لن يكون هناك أي مزيد من الصور التي يمكن العثور عليها. 105 00:06:06,720 --> 00:06:10,760 لذلك دعونا نعود إلى fread مرة أخرى، وأعدكم. 106 00:06:10,760 --> 00:06:15,600 fread إرجاع عدد العناصر الحجم، الحجم، وكانوا على استعداد في بنجاح. 107 00:06:15,600 --> 00:06:19,440 من الناحية المثالية، وهذا سيكون مهما يمكنك تمرير لفي العدد، أليس كذلك؟ 108 00:06:19,440 --> 00:06:24,140 لأنك تحاول قراءة عدد عناصر الحجم، الحجم. 109 00:06:24,140 --> 00:06:29,380 ولكن إذا fread ليست قادرة على قراءة ذلك عدد من العناصر، ثم أنها سوف العودة 110 00:06:29,380 --> 00:06:32,530 أيا كان عدد قراءتها بنجاح. 111 00:06:32,530 --> 00:06:36,310 >> الآن، هناك شيء واحد مهم هو أن نلاحظ أنه إذا كنت تستخدم ملف آخر I / O 112 00:06:36,310 --> 00:06:43,860 وظيفة مثل fgetc، فإنه سوف يعود أيضا كيف العديد من العناصر قراءتها بنجاح. 113 00:06:43,860 --> 00:06:48,000 ما هو مفيد حول هذه الوظيفة أنه إذا كنت تستخدم وظائف داخل ل 114 00:06:48,000 --> 00:06:53,190 حالة، وأنها سوف تنفذ نفسها حين تحديد هذا الشرط، الذي هو 115 00:06:53,190 --> 00:06:54,340 فقط مفيدة حقا. 116 00:06:54,340 --> 00:07:00,440 حتى إذا كان لديك هذه الشروط، مثلا، إذا العازلة fread، DOG sizeof، 2، 117 00:07:00,440 --> 00:07:04,870 المؤشر، يساوي يساوي 1، التي يعني ان كنت ترغب في قراءة 118 00:07:04,870 --> 00:07:06,540 2 الكلاب في ذلك الوقت. 119 00:07:06,540 --> 00:07:13,490 ولكن إذا fread بإرجاع 1 بدلا من 2 كما المتوقع، وهذا يعني أن هناك 2 120 00:07:13,490 --> 00:07:16,480 الكلاب اليسار في الملف الخاص بي، وإنما 1. 121 00:07:16,480 --> 00:07:22,450 ولكن اذا عاد 2، ثم لا يزال لدي تلك الكلاب 2 داخل بلدي العازلة. 122 00:07:22,450 --> 00:07:26,280 >> وحتى الآن والتي تمنحك شعورا كيفية تحقق لنهاية الملف، ولكن 123 00:07:26,280 --> 00:07:28,940 دعنا نذهب الآن من خلال المنطق. 124 00:07:28,940 --> 00:07:32,460 كيف يمكننا في الواقع قطعة جميع من هذه العناصر معا؟ 125 00:07:32,460 --> 00:07:36,880 بمجرد أن تصل أول JPG لدينا، منذ ونحن نعلم أن JPGS يتم تخزين 126 00:07:36,880 --> 00:07:40,910 متاخم، سنكون الكتابة حتى نصل إلى نهاية الملف البطاقة. 127 00:07:40,910 --> 00:07:43,950 لكننا لا تريد أن تكتب أي شيء حتى ذلك الحين. 128 00:07:43,950 --> 00:07:48,710 لذلك يهم، ليس فقط أننا في بداية JPG جديدة، ولكن ما إذا كان 129 00:07:48,710 --> 00:07:50,655 لقد وجدنا بالفعل JPG أو لا. 130 00:07:50,655 --> 00:07:55,390 >> إذا انها بداية جديدة JPG، سنقوم تريد إغلاق ملف JPG الحالي إذا لدينا 131 00:07:55,390 --> 00:07:59,110 لدينا واحدة مفتوحة، ومفتوحة واحدة جديدة لكتابة فيه. 132 00:07:59,110 --> 00:08:03,340 إذا لم يكن بداية جديدة JPG، رغم ذلك، سنستمر في ملف JPG نفسه 133 00:08:03,340 --> 00:08:05,910 فتح والكتابة في ذلك. 134 00:08:05,910 --> 00:08:10,100 سنقوم إرسال عازلة لدينا في أيهما ملف JPG لدينا مفتوحة، شريطة أن 135 00:08:10,100 --> 00:08:12,120 لدينا واحدة مفتوحة، بطبيعة الحال. 136 00:08:12,120 --> 00:08:16,190 إذا لم نجد أول JPG لدينا حتى الآن، ونحن لا تكتب أي شيء. 137 00:08:16,190 --> 00:08:20,290 وتستمر هذه العملية حتى تقوم الوصول إلى نهاية الملف البطاقة. 138 00:08:20,290 --> 00:08:23,410 >> وأخيرا، فأنت تريد أن تجعل متأكد أنك fclose أي 139 00:08:23,410 --> 00:08:25,800 الملفات التي كنت قد fopened. 140 00:08:25,800 --> 00:08:28,360 مرة كنت مرتاحا مع المفاهيم، نلقي نظرة على بعض 141 00:08:28,360 --> 00:08:30,840 شبة الكود، والتي لقد شملت هنا. 142 00:08:30,840 --> 00:08:34,830 أولا، تريد فتح ملف البطاقة، ثم كرر العملية التالية 143 00:08:34,830 --> 00:08:37,144 حتى كنت قد وصلت إلى نهاية البطاقة. 144 00:08:37,144 --> 00:08:40,880 كنت ترغب في قراءة 512 بايت في المخزن مؤقت. 145 00:08:40,880 --> 00:08:43,934 استخدام هذا المخزن المؤقت، فأنت تريد أن تحقق سواء كنت في بداية 146 00:08:43,934 --> 00:08:45,300 JPG جديدة أم لا. 147 00:08:45,300 --> 00:08:48,400 والجواب على هذا السؤال سوف تؤثر إدارة الملفات الخاصة بك - 148 00:08:48,400 --> 00:08:51,940 الملفات التي تفتحها، والتي منها هل إغلاقه. 149 00:08:51,940 --> 00:08:55,220 >> ثم، هل وجدت بالفعل JPG؟ 150 00:08:55,220 --> 00:08:57,740 كيف هل تم حفظ المسار من ذلك؟ 151 00:08:57,740 --> 00:09:01,735 ثم، وهذا يتوقف على ذلك، عليك إما إرسال إلى JPG الحالية التي 152 00:09:01,735 --> 00:09:07,090 لديهم مفتوحة، أو لا يكتب ذلك على الإطلاق، لأنك لا يمكن العثور على JPG حتى الآن. 153 00:09:07,090 --> 00:09:10,870 أخيرا، مرة واحدة كنت قد وصلت إلى نهاية ملف، فأنت تريد أن إغلاق أي 154 00:09:10,870 --> 00:09:12,590 تبقى الملفات التي قمت بفتحها. 155 00:09:12,590 --> 00:09:14,590 نحن نريد أن تكون مرتبة هنا. 156 00:09:14,590 --> 00:09:18,790 >> ومع ذلك، كنت قد تعافى كل من الملفات المفقودة من تلك الذاكرة 157 00:09:18,790 --> 00:09:21,620 بطاقة، وهو الانجاز مدهشا. 158 00:09:21,620 --> 00:09:23,430 حتى بات نفسك على ظهره. 159 00:09:23,430 --> 00:09:27,560 ولكن، هناك عنصر واحد أكثر ل وPSET، وهي المسابقة. 160 00:09:27,560 --> 00:09:30,920 ستجد أن جميع الصور بعد أن كنت قد تعافى هي في الواقع 161 00:09:30,920 --> 00:09:32,820 صور من الموظفين في CS50. 162 00:09:32,820 --> 00:09:38,500 حتى إذا كنت في الحرم الجامعي أو في مكان ما القريب، ثم يمكنك أن تأخذ الصور مع 163 00:09:38,500 --> 00:09:42,600 الموظفين، والقسم الذي يحتوي على معظم الصور مع الموظفين 164 00:09:42,600 --> 00:09:46,940 من ملفاتهم تعافى سوف الحصول على جائزة رهيبة. 165 00:09:46,940 --> 00:09:50,650 مع ذلك، ثم الانتهاء لاستعادة PSET. 166 00:09:50,650 --> 00:09:53,600 اسمي Zamyla، وهذا هو CS50. 167 00:09:53,600 --> 00:10:01,835