1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [أرشيف I / O] 2 00:00:02,000 --> 00:00:04,000 [جايسون هيرشهورن، جامعة هارفارد] 3 00:00:04,000 --> 00:00:07,000 [هذا CS50، CS50.TV] 4 00:00:07,000 --> 00:00:11,000 عندما نفكر في ملف، ما يتبادر إلى الذهن هو مستند Microsoft Word، 5 00:00:11,000 --> 00:00:14,000 صورة JPEG، أو أغنية MP3، 6 00:00:14,000 --> 00:00:17,000 ونتفاعل مع كل من هذه الأنواع من الملفات بطرق مختلفة. 7 00:00:17,000 --> 00:00:20,000 على سبيل المثال، في Word المستند نضيف النص 8 00:00:20,000 --> 00:00:24,000 بينما مع صورة JPEG ونحن قد قص حواف أو تنميق الألوان. 9 00:00:24,000 --> 00:00:28,000 تحت غطاء محرك السيارة بعد كافة الملفات في جهاز الكمبيوتر لدينا ليست أكثر 10 00:00:28,000 --> 00:00:31,000 من سلسلة طويلة من الأصفار ومنها. 11 00:00:31,000 --> 00:00:33,000 والامر متروك لتطبيق معين أن يتفاعل مع الملف 12 00:00:33,000 --> 00:00:38,000 أن تقرر كيفية معالجة هذا التسلسل الطويل وتقديمها للمستخدم. 13 00:00:38,000 --> 00:00:41,000 من ناحية، قد نظر في وثيقة بايت واحد فقط، 14 00:00:41,000 --> 00:00:45,000 أو 8 أصفار ومنها، وعرض على حرف ASCII على الشاشة. 15 00:00:45,000 --> 00:00:48,000 من ناحية أخرى، قد تبدو صورة نقطية في 3 بايت، 16 00:00:48,000 --> 00:00:50,000 أو 24 أصفار ومنها، 17 00:00:50,000 --> 00:00:53,000 وتفسيرها من 3 أرقام ست عشرية 18 00:00:53,000 --> 00:00:56,000 التي تمثل القيم للأحمر والأخضر والأزرق 19 00:00:56,000 --> 00:00:58,000 في بكسل واحد من الصورة. 20 00:00:58,000 --> 00:01:01,000 أيا كانت تبدو على الشاشة، في جوهرها، 21 00:01:01,000 --> 00:01:05,000 الملفات ليست أكثر من سلسلة من الأصفار ومنها. 22 00:01:05,000 --> 00:01:08,000 لذلك دعونا الغوص في وننظر في كيفية التعامل مع الواقع هذه الأصفار ومنها 23 00:01:08,000 --> 00:01:12,000 عندما يتعلق الأمر إلى الكتابة والقراءة من ملف. 24 00:01:12,000 --> 00:01:15,000 >> سأبدأ من كسرها لأسفل في عملية بسيطة جزء 3-. 25 00:01:15,000 --> 00:01:19,000 المقبل، سوف يغوص في أمثلة التعليمات البرمجية اللذين تثبت هذه الأجزاء الثلاثة. 26 00:01:19,000 --> 00:01:23,000 وأخيرا، سوف تستعرض العملية وبعض من تفاصيلها الأكثر أهمية. 27 00:01:23,000 --> 00:01:25,000 كما هو الحال مع أي ملف الذي يجلس على سطح المكتب، 28 00:01:25,000 --> 00:01:28,000 أول شيء فعله هو لفتحه. 29 00:01:28,000 --> 00:01:31,000 في C ونحن نفعل ذلك من خلال الإعلان عن مؤشر إلى البنية محددة مسبقا 30 00:01:31,000 --> 00:01:33,000 الذي يمثل ملف على القرص. 31 00:01:33,000 --> 00:01:38,460 في هذه الدعوة وظيفة، قررنا أيضا ما إذا كنا نريد الكتابة إلى أو قراءة من الملف. 32 00:01:38,460 --> 00:01:41,660 المقبل، ونحن نفعل القراءة والكتابة الفعلية. 33 00:01:41,660 --> 00:01:44,800 هناك عدد من الوظائف المتخصصة يمكننا استخدامها في هذا الجزء، 34 00:01:44,800 --> 00:01:48,790 وجميعهم تقريبا تبدأ F الرسالة، التي تقف على الملف. 35 00:01:48,790 --> 00:01:53,560 الماضي، أقرب إلى الأحمر قليلا X في الزاوية العليا من الملفات المفتوحة على الكمبيوتر، 36 00:01:53,560 --> 00:01:56,680 نحن إغلاق الملف مع استدعاء دالة النهائي. 37 00:01:56,680 --> 00:01:59,540 الآن أن لدينا فكرة عامة عن ما نحن بصدد القيام به، 38 00:01:59,540 --> 00:02:02,000 دعونا الغوص في التعليمات البرمجية. 39 00:02:02,000 --> 00:02:06,100 >> في هذا الدليل، لدينا ملفين وC ملفاتهم للتنفيذ المقابلة. 40 00:02:06,100 --> 00:02:09,710 برنامج الآلة الكاتبة يأخذ وسيطة واحدة سطر الأوامر، 41 00:02:09,710 --> 00:02:12,060 اسم الوثيقة نريد خلق. 42 00:02:12,060 --> 00:02:16,160 في هذه الحالة، سوف نطلق عليه doc.txt. 43 00:02:16,160 --> 00:02:19,080 دعونا تشغيل البرنامج وإدخال زوجين من الخطوط. 44 00:02:19,080 --> 00:02:23,660 مرحبا. اسمي جيسون. 45 00:02:23,660 --> 00:02:26,710 وأخيرا، فإننا سوف اكتب "إنهاء". 46 00:02:26,710 --> 00:02:29,720 إذا كنا الآن قائمة كافة الملفات في هذا الدليل، 47 00:02:29,720 --> 00:02:33,770 نرى ما هو موجود يسمى مستند جديد doc.txt. 48 00:02:34,190 --> 00:02:36,110 هذا هو ملف هذا البرنامج أنشأته للتو. 49 00:02:36,110 --> 00:02:40,520 وبطبيعة الحال، فإنه هو أيضا ليس أكثر من سلسلة طويلة من الأصفار ومنها. 50 00:02:41,100 --> 00:02:43,260 إذا كان لنا أن فتح هذا الملف الجديد، 51 00:02:43,260 --> 00:02:45,870 نرى خطوط 3 من قانون دخلنا في برنامجنا - 52 00:02:46,060 --> 00:02:49,060 مرحبا. قد يكون اسم هو جيسون. 53 00:02:49,580 --> 00:02:52,090 ولكن ما يحدث في الواقع على typewriter.c عندما يعمل؟ 54 00:02:52,810 --> 00:02:55,520 السطر الأول من الفائدة بالنسبة لنا هو خط 24. 55 00:02:55,560 --> 00:02:58,490 في هذا الخط، فإننا نعلن لدينا مؤشر الملف. 56 00:02:59,080 --> 00:03:03,140 وظيفة يقوم بإرجاع هذا المؤشر، الدالة fopen، يأخذ اثنين الحجج. 57 00:03:03,140 --> 00:03:07,440 الأول هو اسم الملف بما في ذلك ملحق الملف إذا كان ذلك مناسبا. 58 00:03:07,440 --> 00:03:10,980 يذكر أن امتداد الملف لا يؤثر على الملف في أدنى مستوى لها. 59 00:03:10,980 --> 00:03:14,640 نتعامل دائما مع سلسلة طويلة من الأصفار ومنها. 60 00:03:14,640 --> 00:03:19,630 ولكنه نفوذ كيفية تفسير الملفات والتطبيقات وتستخدم ما لفتحها. 61 00:03:19,630 --> 00:03:22,290 الوسيطة الثانية إلى الدالة fopen هو حرف واحد 62 00:03:22,290 --> 00:03:25,300 أن تقف على ما نخطط له بعد أن فتح الملف. 63 00:03:25,300 --> 00:03:30,630 هناك ثلاثة خيارات لهذه الحجة - W، R، وA. 64 00:03:30,630 --> 00:03:34,900 لقد اخترنا في هذه الحالة ث لأننا نريد أن الكتابة إلى الملف. 65 00:03:34,900 --> 00:03:38,820 R، كما يمكنك تخمين ربما، هو لقراءة إلى الملف. 66 00:03:38,820 --> 00:03:41,760 وهي لإلحاق إلى الملف. 67 00:03:41,760 --> 00:03:44,960 في حين أن كلا ث، ويمكن استخدامه للكتابة على الملفات، 68 00:03:44,960 --> 00:03:47,460 سوف ابدأ في كتابة ث من بداية الملف 69 00:03:47,460 --> 00:03:50,810 ويحتمل أن تكون الكتابة فوق أي البيانات التي سبق تخزينها. 70 00:03:50,810 --> 00:03:54,070 بشكل افتراضي، الملف نفتح، إذا كان غير موجود بالفعل، 71 00:03:54,070 --> 00:03:57,180 تم إنشاؤه في الدليل الحالي عملنا. 72 00:03:57,180 --> 00:04:00,540 ومع ذلك، إذا كنا نريد الوصول إلى أو إنشاء ملف في موقع مختلف، 73 00:04:00,540 --> 00:04:02,650 في الوسيطة الأولى من الدالة fopen، 74 00:04:02,650 --> 00:04:05,840 ونحن قد تحدد مسار ملف بالإضافة إلى اسم الملف. 75 00:04:05,840 --> 00:04:09,490 في حين أن الجزء الأول من هذه العملية ليست سوى سطر واحد من التعليمات البرمجية طويلة، 76 00:04:09,490 --> 00:04:12,350 انها دائما ممارسة جيدة لتشمل مجموعة أخرى من خطوط 77 00:04:12,350 --> 00:04:15,930 أن تحقق لضمان فتح الملف بنجاح أو إنشاؤها. 78 00:04:15,930 --> 00:04:20,300 إذا الدالة fopen ترجع فارغة، فإننا لا تريد المضي قدما في برنامجنا، 79 00:04:20,300 --> 00:04:23,270 وهذا قد يحدث إذا كان نظام التشغيل من الذاكرة 80 00:04:23,270 --> 00:04:27,940 أو إذا كنا محاولة فتح ملف في الدليل التي لم يكن لدينا الأذونات المناسبة. 81 00:04:27,940 --> 00:04:31,780 >> الجزء الثاني من عملية تجري في حلقة بينما الآلة الكاتبة ل. 82 00:04:31,780 --> 00:04:35,000 نحن استخدام دالة مكتبة CS50 للحصول على مدخلات من المستخدم، 83 00:04:35,000 --> 00:04:37,190 وعلى افتراض أنها لا ترغب في إنهاء البرنامج، 84 00:04:37,190 --> 00:04:41,940 نستخدم fputs ظيفة لاتخاذ سلسلة والكتابة إلى الملف. 85 00:04:41,940 --> 00:04:46,700 fputs هي واحدة فقط من العديد من الوظائف يمكن أن نستخدمها في الكتابة إلى الملف. 86 00:04:46,700 --> 00:04:51,920 وتشمل الآخرين fwrite، fputc، وحتى fprintf. 87 00:04:51,920 --> 00:04:54,840 بغض النظر عن وظيفة خاصة نحن في نهاية المطاف باستخدام، على الرغم من 88 00:04:54,840 --> 00:04:57,480 كل منهم بحاجة إلى معرفة، عن طريق حججهم، 89 00:04:57,480 --> 00:04:59,670 على الأقل أمرين: - 90 00:04:59,670 --> 00:05:03,140 ما يجب أن تكون مكتوبة وحيث يجب أن تكون مكتوبة ل. 91 00:05:03,140 --> 00:05:07,240 في حالتنا، والمدخلات هي السلسلة التي تحتاج إلى أن تكون مكتوبة 92 00:05:07,240 --> 00:05:11,290 وFP هو المؤشر الذي يوجه لنا حيث أننا الكتابة. 93 00:05:11,290 --> 00:05:15,330 في هذا البرنامج، الجزء الثاني من عملية واضحة ومباشرة إلى حد ما. 94 00:05:15,330 --> 00:05:17,360 نحن مجرد اتخاذ سلسلة من المستخدم 95 00:05:17,360 --> 00:05:22,120 وإضافة إلى ملف مباشرة لدينا مع القليل إلى أي التحقق من صحة المدخلات أو عمليات التفتيش الأمنية. 96 00:05:22,120 --> 00:05:26,160 في كثير من الأحيان، ومع ذلك، سوف يستغرق الجزء الثاني الجزء الأكبر من التعليمات البرمجية. 97 00:05:26,160 --> 00:05:30,580 وأخيرا، هو الجزء الثالث على خط 58، حيث أننا إغلاق الملف. 98 00:05:30,580 --> 00:05:34,860 هنا ندعو fclose وتمريرها لدينا مؤشر الملف الأصلي. 99 00:05:34,860 --> 00:05:39,500 في السطر اللاحق، نعود الصفر، مما يشير إلى نهاية برنامجنا. 100 00:05:39,500 --> 00:05:42,630 و، نعم، الجزء الثالث هو بهذه البساطة. 101 00:05:42,630 --> 00:05:45,260 >> دعنا ننتقل إلى قراءة من الملفات. 102 00:05:45,260 --> 00:05:48,220 مرة أخرى في دليلنا لدينا ملف يسمى printer.c. 103 00:05:48,220 --> 00:05:50,910 دعونا تشغيله مع ملف أنشأنا فقط - 104 00:05:50,910 --> 00:05:53,350 doc.txt. 105 00:05:53,350 --> 00:05:58,150 هذا البرنامج، وكما يوحي اسمها، وسوف ببساطة طباعة محتويات الملف تمريرها إليها. 106 00:05:58,150 --> 00:06:00,230 وهناك لدينا ذلك. 107 00:06:00,230 --> 00:06:03,780 الأسطر من التعليمات البرمجية في وقت سابق كنا قد كتبته وحفظها في doc.txt. 108 00:06:03,780 --> 00:06:06,980 مرحبا. اسمي جيسون. 109 00:06:06,980 --> 00:06:09,120 إذا كان لنا أن الغوص في printer.c، 110 00:06:09,120 --> 00:06:13,570 ونحن نرى أن الكثير من التعليمات البرمجية مشابها لما مشينا فقط من خلال typewriter.c في. 111 00:06:13,570 --> 00:06:16,720 في الواقع خط 22، حيث فتحنا الملف، 112 00:06:16,720 --> 00:06:19,220 وخط 39، حيث أننا إغلاق الملف، 113 00:06:19,220 --> 00:06:23,890 كلاهما مماثلة تقريبا لtypewriter.c، باستثناء الحجة الدالة fopen الثاني. 114 00:06:23,890 --> 00:06:26,510 هذه المرة إننا نقرأ من ملف، 115 00:06:26,510 --> 00:06:29,040 لذلك اخترنا ص بدلا من ث. 116 00:06:29,040 --> 00:06:31,950 وهكذا، دعونا نركز على الجزء الثاني من هذه العملية. 117 00:06:31,950 --> 00:06:36,060 في خط 35، والشرط الثاني في حلقة دينا 4، 118 00:06:36,060 --> 00:06:38,590 نحن إجراء مكالمة إلى fgets، 119 00:06:38,590 --> 00:06:42,190 وظيفة مرافق لfputs من قبل. 120 00:06:42,190 --> 00:06:44,660 هذه المرة لدينا ثلاث حجج. 121 00:06:44,660 --> 00:06:48,810 الأول هو مؤشر إلى مجموعة من الشخصيات حيث سيتم تخزين السلسلة. 122 00:06:48,810 --> 00:06:52,670 والثاني هو الحد الأقصى لعدد الأحرف يجب أن تقرأ. 123 00:06:52,670 --> 00:06:56,010 والثالث هو مؤشر إلى الملف الذي نعمل. 124 00:06:56,010 --> 00:07:00,780 ستلاحظ أن لحلقة تنتهي عندما يعود fgets فارغة. 125 00:07:00,780 --> 00:07:02,940 هناك نوعان من الأسباب أن هذا قد حدث. 126 00:07:02,940 --> 00:07:05,380 أولا، قد يكون حدث خطأ. 127 00:07:05,380 --> 00:07:10,740 الثانية، وأكثر من المرجح، تم التوصل إلى نهاية الملف وقراءة الأحرف وليس أكثر من ذلك. 128 00:07:10,740 --> 00:07:14,040 في حال كنت أتساءل، واثنين من وظائف موجودة التي تسمح لنا بالقول 129 00:07:14,040 --> 00:07:17,160 هذا السبب هو السبب لهذا مؤشر فارغة معينة. 130 00:07:17,160 --> 00:07:21,090 و، وليس من المستغرب، نظرا لأنها لها علاقة مع العمل مع الملفات، 131 00:07:21,090 --> 00:07:26,940 كل وظيفة ferror وبدء وظيفة feof مع حرف F. 132 00:07:26,940 --> 00:07:32,130 >> وأخيرا، وقبل أن نختتم، واحدة ملاحظة سريعة حول نهاية ظيفة الملف، 133 00:07:32,130 --> 00:07:36,690 التي، كما ذكرت للتو، كما هو مكتوب feof. 134 00:07:36,690 --> 00:07:41,550 في كثير من الأحيان ستجد نفسك باستخدام الوقت وحلقات لقراءة تدريجيا في طريقك من خلال الملفات. 135 00:07:41,550 --> 00:07:45,790 وبالتالي، سوف تحتاج إلى وسيلة لوضع حد لهذه الحلقات بعد الوصول إلى نهاية هذه الملفات. 136 00:07:45,790 --> 00:07:50,510 تدعو feof على مؤشر الملف الخاص بك والتحقق لمعرفة ما إذا كان هذا صحيحا 137 00:07:50,510 --> 00:07:52,310 لن يفعل ذلك تماما. 138 00:07:52,310 --> 00:07:59,820 وهكذا، في حين قد حلقة مع حالة (! feof (اف ب)) يبدو وكأنه حل مناسب تماما. 139 00:07:59,820 --> 00:08:03,770 ومع ذلك، يقول لدينا سطر واحد في ملف ترك نصنا. 140 00:08:03,770 --> 00:08:07,130 سوف ندخل حلقة لدينا الوقت وكل شيء سيكون العمل بها كما هو مخطط لها. 141 00:08:07,130 --> 00:08:12,750 على الجولة المقبلة من خلال برنامجنا سوف تحقق لمعرفة ما إذا كان من feof FP صحيح، 142 00:08:12,750 --> 00:08:15,430 ولكن - وهذه هي النقطة الحاسمة لفهم هنا - 143 00:08:15,430 --> 00:08:17,770 فإنه لن يكون صحيحا فقط حتى الآن. 144 00:08:17,770 --> 00:08:21,110 هذا لأن الغرض من feof ليس للتحقق 145 00:08:21,110 --> 00:08:24,400 إذا كانت المكالمة التالية إلى وظيفة قراءة سوف تصل الى نهاية الملف، 146 00:08:24,400 --> 00:08:28,190 بل للتأكد من وجود أو عدم وبالفعل نهاية الملف الذي تم التوصل إليه. 147 00:08:28,190 --> 00:08:30,140 في حالة من هذا المثال، 148 00:08:30,140 --> 00:08:32,780 قراءة السطر الأخير من ملف لدينا بسلاسة تماما، 149 00:08:32,780 --> 00:08:36,210 ولكن البرنامج لا نعرف حتى الآن بعد أن قمنا ضرب نهاية الملف لدينا. 150 00:08:36,210 --> 00:08:40,549 انها ليست حتى يمكن للمرء قراءة العدادات الإضافية التي نهاية الملف. 151 00:08:40,549 --> 00:08:43,210 وهكذا، فإن حالة الصحيح هو ما يلي: 152 00:08:43,210 --> 00:08:49,330 fgets ولها ثلاث وسائط - الناتج، وحجم الانتاج، وتنظيم الأسرة - 153 00:08:49,330 --> 00:08:52,570 وجميع من قدم المساواة لا أن فارغة. 154 00:08:52,570 --> 00:08:55,260 هذا هو النهج الذي سلكناه في printer.c، 155 00:08:55,260 --> 00:08:57,890 وفي هذه الحالة، بعد إنهاء الحلقة، 156 00:08:57,890 --> 00:09:04,290 يمكن استدعاء feof أو ferror لإعلام المستخدم عن المنطق محددة للخروج هذه الحلقة. 157 00:09:04,290 --> 00:09:08,100 >> الكتابة والقراءة لمن ملف هو، في أبسط صورة، 158 00:09:08,100 --> 00:09:10,150 بسيطة الجزء 3-العملية. 159 00:09:10,150 --> 00:09:12,530 أولا، نحن فتح الملف. 160 00:09:12,530 --> 00:09:16,740 الثانية، وضعنا بعض الأشياء في ملف لدينا أو اتخاذ بعض الأشياء للخروج منه. 161 00:09:16,740 --> 00:09:19,200 ثالثا، نحن إغلاق الملف. 162 00:09:19,200 --> 00:09:21,170 الأجزاء الأولى والأخيرة هي سهلة. 163 00:09:21,170 --> 00:09:23,920 الجزء الأوسط هو المكان الذي تكمن الاشياء صعبة. 164 00:09:23,920 --> 00:09:27,760 وعلى الرغم من تحت غطاء محرك السيارة نتعامل دائما مع سلسلة طويلة من الأصفار ومنها، 165 00:09:27,760 --> 00:09:30,710 فإنه يساعد عند ترميز لإضافة طبقة من التجريد 166 00:09:30,710 --> 00:09:35,350 التي تحول تسلسل إلى شيء أكثر شبها ما اعتدنا على رؤية. 167 00:09:35,350 --> 00:09:39,570 على سبيل المثال، إذا كنا نعمل مع ملف صورة نقطية 24 بت، 168 00:09:39,570 --> 00:09:43,290 سنقوم المرجح أن قراءة أو كتابة ثلاثة بايت في كل مرة. 169 00:09:43,290 --> 00:09:46,450 وفي هذه الحالة، فإنه من المنطقي أن تحدد بشكل مناسب واسم 170 00:09:46,450 --> 00:09:48,980 وهذا هو البنية 3 بايت كبيرة. 171 00:09:48,980 --> 00:09:51,410 >> على الرغم من أن العمل مع الملفات تبدو معقدة، 172 00:09:51,410 --> 00:09:54,530 الاستفادة منها يتيح لنا أن نفعل شيئا رائعا حقا. 173 00:09:54,530 --> 00:09:58,880 يمكننا تغيير حالة العالم الخارجي برنامجنا، 174 00:09:58,880 --> 00:10:01,730 يمكننا خلق شيء الذي يعيش خارج الحياة من برنامجنا، 175 00:10:01,730 --> 00:10:07,190 أو يمكننا تغيير شيء حتى التي تم إنشاؤها قبل تشغيل برنامجنا التي. 176 00:10:07,190 --> 00:10:11,210 التفاعل مع الملفات هو جزء من برمجة قوية حقا في C. 177 00:10:11,210 --> 00:10:15,300 وانا متحمس لرؤية ما كنت تريد الذهاب لإنشاء معها في التعليمات البرمجية القادمة. 178 00:10:15,300 --> 00:10:19,770 اسمي جيسون هيرشهورن. هذا هو CS50. 179 00:10:19,770 --> 00:10:21,770 [CS50.TV] 180 00:10:21,770 --> 00:10:25,940 >> [ضحك] 181 00:10:25,940 --> 00:10:29,330 حسنا. على المرء أن يأخذ. هنا نذهب. 182 00:10:49,000 --> 00:10:52,140 عندما نفكر في ملف - >> أوه، الانتظار. آسف. 183 00:10:52,140 --> 00:10:56,800 [ضحك] حسنا. 184 00:11:06,620 --> 00:11:09,970 يا هناك. 185 00:11:13,670 --> 00:11:16,310 عندما نفكر في ملف - 186 00:11:17,610 --> 00:11:20,710 عندما تفكر في ملف - حسنا. قل لي عندما تكون مستعدا. 187 00:11:20,710 --> 00:11:22,520 أوه، عظيم. 188 00:11:22,520 --> 00:11:26,180 على الرغم من قد يقرأ من الملقن يبدو - لا. بلدي سيئة.