[Powered by Google Translate] [أرشيف I / O]
[جايسون هيرشهورن، جامعة هارفارد]
[هذا CS50، CS50.TV]
عندما نفكر في ملف، ما يتبادر إلى الذهن هو مستند Microsoft Word،
صورة JPEG، أو أغنية MP3،
ونتفاعل مع كل من هذه الأنواع من الملفات بطرق مختلفة.
على سبيل المثال، في Word المستند نضيف النص
بينما مع صورة JPEG ونحن قد قص حواف أو تنميق الألوان.
تحت غطاء محرك السيارة بعد كافة الملفات في جهاز الكمبيوتر لدينا ليست أكثر
من سلسلة طويلة من الأصفار ومنها.
والامر متروك لتطبيق معين أن يتفاعل مع الملف
أن تقرر كيفية معالجة هذا التسلسل الطويل وتقديمها للمستخدم.
من ناحية، قد نظر في وثيقة بايت واحد فقط،
أو 8 أصفار ومنها، وعرض على حرف ASCII على الشاشة.
من ناحية أخرى، قد تبدو صورة نقطية في 3 بايت،
أو 24 أصفار ومنها،
وتفسيرها من 3 أرقام ست عشرية
التي تمثل القيم للأحمر والأخضر والأزرق
في بكسل واحد من الصورة.
أيا كانت تبدو على الشاشة، في جوهرها،
الملفات ليست أكثر من سلسلة من الأصفار ومنها.
لذلك دعونا الغوص في وننظر في كيفية التعامل مع الواقع هذه الأصفار ومنها
عندما يتعلق الأمر إلى الكتابة والقراءة من ملف.
>> سأبدأ من كسرها لأسفل في عملية بسيطة جزء 3-.
المقبل، سوف يغوص في أمثلة التعليمات البرمجية اللذين تثبت هذه الأجزاء الثلاثة.
وأخيرا، سوف تستعرض العملية وبعض من تفاصيلها الأكثر أهمية.
كما هو الحال مع أي ملف الذي يجلس على سطح المكتب،
أول شيء فعله هو لفتحه.
في C ونحن نفعل ذلك من خلال الإعلان عن مؤشر إلى البنية محددة مسبقا
الذي يمثل ملف على القرص.
في هذه الدعوة وظيفة، قررنا أيضا ما إذا كنا نريد الكتابة إلى أو قراءة من الملف.
المقبل، ونحن نفعل القراءة والكتابة الفعلية.
هناك عدد من الوظائف المتخصصة يمكننا استخدامها في هذا الجزء،
وجميعهم تقريبا تبدأ F الرسالة، التي تقف على الملف.
الماضي، أقرب إلى الأحمر قليلا X في الزاوية العليا من الملفات المفتوحة على الكمبيوتر،
نحن إغلاق الملف مع استدعاء دالة النهائي.
الآن أن لدينا فكرة عامة عن ما نحن بصدد القيام به،
دعونا الغوص في التعليمات البرمجية.
>> في هذا الدليل، لدينا ملفين وC ملفاتهم للتنفيذ المقابلة.
برنامج الآلة الكاتبة يأخذ وسيطة واحدة سطر الأوامر،
اسم الوثيقة نريد خلق.
في هذه الحالة، سوف نطلق عليه doc.txt.
دعونا تشغيل البرنامج وإدخال زوجين من الخطوط.
مرحبا. اسمي جيسون.
وأخيرا، فإننا سوف اكتب "إنهاء".
إذا كنا الآن قائمة كافة الملفات في هذا الدليل،
نرى ما هو موجود يسمى مستند جديد doc.txt.
هذا هو ملف هذا البرنامج أنشأته للتو.
وبطبيعة الحال، فإنه هو أيضا ليس أكثر من سلسلة طويلة من الأصفار ومنها.
إذا كان لنا أن فتح هذا الملف الجديد،
نرى خطوط 3 من قانون دخلنا في برنامجنا -
مرحبا. قد يكون اسم هو جيسون.
ولكن ما يحدث في الواقع على typewriter.c عندما يعمل؟
السطر الأول من الفائدة بالنسبة لنا هو خط 24.
في هذا الخط، فإننا نعلن لدينا مؤشر الملف.
وظيفة يقوم بإرجاع هذا المؤشر، الدالة fopen، يأخذ اثنين الحجج.
الأول هو اسم الملف بما في ذلك ملحق الملف إذا كان ذلك مناسبا.
يذكر أن امتداد الملف لا يؤثر على الملف في أدنى مستوى لها.
نتعامل دائما مع سلسلة طويلة من الأصفار ومنها.
ولكنه نفوذ كيفية تفسير الملفات والتطبيقات وتستخدم ما لفتحها.
الوسيطة الثانية إلى الدالة fopen هو حرف واحد
أن تقف على ما نخطط له بعد أن فتح الملف.
هناك ثلاثة خيارات لهذه الحجة - W، R، وA.
لقد اخترنا في هذه الحالة ث لأننا نريد أن الكتابة إلى الملف.
R، كما يمكنك تخمين ربما، هو لقراءة إلى الملف.
وهي لإلحاق إلى الملف.
في حين أن كلا ث، ويمكن استخدامه للكتابة على الملفات،
سوف ابدأ في كتابة ث من بداية الملف
ويحتمل أن تكون الكتابة فوق أي البيانات التي سبق تخزينها.
بشكل افتراضي، الملف نفتح، إذا كان غير موجود بالفعل،
تم إنشاؤه في الدليل الحالي عملنا.
ومع ذلك، إذا كنا نريد الوصول إلى أو إنشاء ملف في موقع مختلف،
في الوسيطة الأولى من الدالة fopen،
ونحن قد تحدد مسار ملف بالإضافة إلى اسم الملف.
في حين أن الجزء الأول من هذه العملية ليست سوى سطر واحد من التعليمات البرمجية طويلة،
انها دائما ممارسة جيدة لتشمل مجموعة أخرى من خطوط
أن تحقق لضمان فتح الملف بنجاح أو إنشاؤها.
إذا الدالة fopen ترجع فارغة، فإننا لا تريد المضي قدما في برنامجنا،
وهذا قد يحدث إذا كان نظام التشغيل من الذاكرة
أو إذا كنا محاولة فتح ملف في الدليل التي لم يكن لدينا الأذونات المناسبة.
>> الجزء الثاني من عملية تجري في حلقة بينما الآلة الكاتبة ل.
نحن استخدام دالة مكتبة CS50 للحصول على مدخلات من المستخدم،
وعلى افتراض أنها لا ترغب في إنهاء البرنامج،
نستخدم fputs ظيفة لاتخاذ سلسلة والكتابة إلى الملف.
fputs هي واحدة فقط من العديد من الوظائف يمكن أن نستخدمها في الكتابة إلى الملف.
وتشمل الآخرين fwrite، fputc، وحتى fprintf.
بغض النظر عن وظيفة خاصة نحن في نهاية المطاف باستخدام، على الرغم من
كل منهم بحاجة إلى معرفة، عن طريق حججهم،
على الأقل أمرين: -
ما يجب أن تكون مكتوبة وحيث يجب أن تكون مكتوبة ل.
في حالتنا، والمدخلات هي السلسلة التي تحتاج إلى أن تكون مكتوبة
وFP هو المؤشر الذي يوجه لنا حيث أننا الكتابة.
في هذا البرنامج، الجزء الثاني من عملية واضحة ومباشرة إلى حد ما.
نحن مجرد اتخاذ سلسلة من المستخدم
وإضافة إلى ملف مباشرة لدينا مع القليل إلى أي التحقق من صحة المدخلات أو عمليات التفتيش الأمنية.
في كثير من الأحيان، ومع ذلك، سوف يستغرق الجزء الثاني الجزء الأكبر من التعليمات البرمجية.
وأخيرا، هو الجزء الثالث على خط 58، حيث أننا إغلاق الملف.
هنا ندعو fclose وتمريرها لدينا مؤشر الملف الأصلي.
في السطر اللاحق، نعود الصفر، مما يشير إلى نهاية برنامجنا.
و، نعم، الجزء الثالث هو بهذه البساطة.
>> دعنا ننتقل إلى قراءة من الملفات.
مرة أخرى في دليلنا لدينا ملف يسمى printer.c.
دعونا تشغيله مع ملف أنشأنا فقط -
doc.txt.
هذا البرنامج، وكما يوحي اسمها، وسوف ببساطة طباعة محتويات الملف تمريرها إليها.
وهناك لدينا ذلك.
الأسطر من التعليمات البرمجية في وقت سابق كنا قد كتبته وحفظها في doc.txt.
مرحبا. اسمي جيسون.
إذا كان لنا أن الغوص في printer.c،
ونحن نرى أن الكثير من التعليمات البرمجية مشابها لما مشينا فقط من خلال typewriter.c في.
في الواقع خط 22، حيث فتحنا الملف،
وخط 39، حيث أننا إغلاق الملف،
كلاهما مماثلة تقريبا لtypewriter.c، باستثناء الحجة الدالة fopen الثاني.
هذه المرة إننا نقرأ من ملف،
لذلك اخترنا ص بدلا من ث.
وهكذا، دعونا نركز على الجزء الثاني من هذه العملية.
في خط 35، والشرط الثاني في حلقة دينا 4،
نحن إجراء مكالمة إلى fgets،
وظيفة مرافق لfputs من قبل.
هذه المرة لدينا ثلاث حجج.
الأول هو مؤشر إلى مجموعة من الشخصيات حيث سيتم تخزين السلسلة.
والثاني هو الحد الأقصى لعدد الأحرف يجب أن تقرأ.
والثالث هو مؤشر إلى الملف الذي نعمل.
ستلاحظ أن لحلقة تنتهي عندما يعود fgets فارغة.
هناك نوعان من الأسباب أن هذا قد حدث.
أولا، قد يكون حدث خطأ.
الثانية، وأكثر من المرجح، تم التوصل إلى نهاية الملف وقراءة الأحرف وليس أكثر من ذلك.
في حال كنت أتساءل، واثنين من وظائف موجودة التي تسمح لنا بالقول
هذا السبب هو السبب لهذا مؤشر فارغة معينة.
و، وليس من المستغرب، نظرا لأنها لها علاقة مع العمل مع الملفات،
كل وظيفة ferror وبدء وظيفة feof مع حرف F.
>> وأخيرا، وقبل أن نختتم، واحدة ملاحظة سريعة حول نهاية ظيفة الملف،
التي، كما ذكرت للتو، كما هو مكتوب feof.
في كثير من الأحيان ستجد نفسك باستخدام الوقت وحلقات لقراءة تدريجيا في طريقك من خلال الملفات.
وبالتالي، سوف تحتاج إلى وسيلة لوضع حد لهذه الحلقات بعد الوصول إلى نهاية هذه الملفات.
تدعو feof على مؤشر الملف الخاص بك والتحقق لمعرفة ما إذا كان هذا صحيحا
لن يفعل ذلك تماما.
وهكذا، في حين قد حلقة مع حالة (! feof (اف ب)) يبدو وكأنه حل مناسب تماما.
ومع ذلك، يقول لدينا سطر واحد في ملف ترك نصنا.
سوف ندخل حلقة لدينا الوقت وكل شيء سيكون العمل بها كما هو مخطط لها.
على الجولة المقبلة من خلال برنامجنا سوف تحقق لمعرفة ما إذا كان من feof FP صحيح،
ولكن - وهذه هي النقطة الحاسمة لفهم هنا -
فإنه لن يكون صحيحا فقط حتى الآن.
هذا لأن الغرض من feof ليس للتحقق
إذا كانت المكالمة التالية إلى وظيفة قراءة سوف تصل الى نهاية الملف،
بل للتأكد من وجود أو عدم وبالفعل نهاية الملف الذي تم التوصل إليه.
في حالة من هذا المثال،
قراءة السطر الأخير من ملف لدينا بسلاسة تماما،
ولكن البرنامج لا نعرف حتى الآن بعد أن قمنا ضرب نهاية الملف لدينا.
انها ليست حتى يمكن للمرء قراءة العدادات الإضافية التي نهاية الملف.
وهكذا، فإن حالة الصحيح هو ما يلي:
fgets ولها ثلاث وسائط - الناتج، وحجم الانتاج، وتنظيم الأسرة -
وجميع من قدم المساواة لا أن فارغة.
هذا هو النهج الذي سلكناه في printer.c،
وفي هذه الحالة، بعد إنهاء الحلقة،
يمكن استدعاء feof أو ferror لإعلام المستخدم عن المنطق محددة للخروج هذه الحلقة.
>> الكتابة والقراءة لمن ملف هو، في أبسط صورة،
بسيطة الجزء 3-العملية.
أولا، نحن فتح الملف.
الثانية، وضعنا بعض الأشياء في ملف لدينا أو اتخاذ بعض الأشياء للخروج منه.
ثالثا، نحن إغلاق الملف.
الأجزاء الأولى والأخيرة هي سهلة.
الجزء الأوسط هو المكان الذي تكمن الاشياء صعبة.
وعلى الرغم من تحت غطاء محرك السيارة نتعامل دائما مع سلسلة طويلة من الأصفار ومنها،
فإنه يساعد عند ترميز لإضافة طبقة من التجريد
التي تحول تسلسل إلى شيء أكثر شبها ما اعتدنا على رؤية.
على سبيل المثال، إذا كنا نعمل مع ملف صورة نقطية 24 بت،
سنقوم المرجح أن قراءة أو كتابة ثلاثة بايت في كل مرة.
وفي هذه الحالة، فإنه من المنطقي أن تحدد بشكل مناسب واسم
وهذا هو البنية 3 بايت كبيرة.
>> على الرغم من أن العمل مع الملفات تبدو معقدة،
الاستفادة منها يتيح لنا أن نفعل شيئا رائعا حقا.
يمكننا تغيير حالة العالم الخارجي برنامجنا،
يمكننا خلق شيء الذي يعيش خارج الحياة من برنامجنا،
أو يمكننا تغيير شيء حتى التي تم إنشاؤها قبل تشغيل برنامجنا التي.
التفاعل مع الملفات هو جزء من برمجة قوية حقا في C.
وانا متحمس لرؤية ما كنت تريد الذهاب لإنشاء معها في التعليمات البرمجية القادمة.
اسمي جيسون هيرشهورن. هذا هو CS50.
[CS50.TV]
>> [ضحك]
حسنا. على المرء أن يأخذ. هنا نذهب.
عندما نفكر في ملف - >> أوه، الانتظار. آسف.
[ضحك] حسنا.
يا هناك.
عندما نفكر في ملف -
عندما تفكر في ملف - حسنا. قل لي عندما تكون مستعدا.
أوه، عظيم.
على الرغم من قد يقرأ من الملقن يبدو - لا. بلدي سيئة.