يصف كيفية قيام مبرمج لغة C بإنشاء ملف نصي أو ملف ثنائي وفتحه وإغلاقه.
الملف يعني سلسلة من البايتات، سواء كان ملفًا نصيًا أو ملفًا ثنائيًا، لغة C، لا توفر الوصول إلى وظائف المستوى الأعلى فحسب، بل توفر أيضًا استدعاء (نظام التشغيل) الأساسي لمعالجة الملفات الموجودة على جهاز التخزين . سيشرح هذا الفصل الدعوات المهمة في إدارة المستندات.
ملف مفتوح
عادة باستخدام الدالة fopen () لإنشاء ملف جديد أو فتح ملف موجود، يقوم هذا الاستدعاء بتهيئة كائن من النوع FILE يحتوي على كافة المعلومات الضرورية للتحكم في التدفق. فيما يلي النموذج الأولي لاستدعاء هذه الوظيفة:
FILE *fopen ( const char * filename , const char * mode );
هنا filename عبارة عن سلسلة لتسمية ملف، ويمكن أن تكون قيمة وضع الوصول إحدى القيم التالية:
نمط | وصف |
r | افتح ملفًا نصيًا موجودًا يسمح بقراءته. |
w | فتح ملف نصي يسمح بالكتابة إلى الملف. إذا كان الملف غير موجود، يتم إنشاء ملف جديد. هنا، يقوم برنامجك بكتابة المحتوى من بداية الملف. إذا كان الملف موجودًا، فسيتم اقتطاعه إلى الصفر وإعادة كتابته. |
a | افتح ملفًا نصيًا واكتب إلى الملف في وضع الإلحاق. إذا كان الملف غير موجود، يتم إنشاء ملف جديد. هنا، يقوم برنامجك بإلحاق المحتوى بالملفات الموجودة لديك بالفعل. |
r+ | افتح ملفًا نصيًا يسمح لك بقراءة الملف وكتابته. |
w+ | افتح ملفًا نصيًا يسمح لك بقراءة الملف وكتابته. إذا كان الملف موجودًا بالفعل، فسيتم اقتطاع الملف إلى طول صفر، وإذا لم يكن الملف موجودًا، فسيتم إنشاء ملف جديد. |
a+ | افتح ملفًا نصيًا يسمح لك بقراءة الملف وكتابته. إذا كان الملف غير موجود، يتم إنشاء ملف جديد. تبدأ القراءة في بداية الملف، وتكون الكتابة في وضع الإلحاق فقط. |
إذا تمت معالجة الملف الثنائي، استخدم وضع الوصول التالي لاستبدال ما ورد أعلاه:
"rb"، "wb"، "ab"، "rb+"، "r+b"، "wb+"، "w+b"، "ab+"، "a+b"
ملف مغلق
لإغلاق الملف، يرجى استخدام الدالة fClose(). النموذج الأولي للوظيفة هو كما يلي:
كثافة العمليات FClose ( FILE *fp );
- إذا تم إغلاق الملف بنجاح، فإن الدالة fclose() ترجع صفرًا، وإذا كان الخطأ ترجع EOF. في الواقع، تقوم هذه الوظيفة بإزالة البيانات من المخزن المؤقت، وإغلاق الملف، وتحرير كل الذاكرة المستخدمة لهذا الملف. EOF هو ثابت محدد في ملف الرأس stdio.h
توفر مكتبة C القياسية وظائف مختلفة لقراءة وكتابة الملفات حسب الأحرف أو كسلسلة ذات طول ثابت.
الكتابة إلى الملف
فيما يلي أبسط الوظائف لكتابة الأحرف إلى الدفق:
int fputc ( int c , FILE *fp );
تكتب الدالة fputc () قيمة حرف المعلمة c في دفق الإخراج الذي يشير إليه fp. إذا نجحت عمليات الكتابة، فسيتم إرجاع الحرف المكتوب وEOF في حالة حدوث خطأ. يمكنك استخدام الدالة التالية لكتابة سلسلة تنتهي بـ null إلى الدفق:
int fputs ( const char *s , FILE *fp );
تقوم الدالة fputs () بكتابة السلسلة s إلى دفق الإخراج حيث يشير fp إلى. إذا نجحت عملية الكتابة، فإنها تُرجع قيمة غير سالبة وEOF في حالة حدوث خطأ. يمكنك أيضًا استخدام وظيفة int fprintf (FILE * fp, const char * format,...) لكتابة سلسلة إلى الملف. جرب المثال التالي:
ملاحظة: تأكد من توفر دليل tmp لديك، وإذا لم يكن موجودًا، فستحتاج إلى إنشائه على جهاز الكمبيوتر الخاص بك أولاً.
/ tmp عادة ما يكون دليلاً مؤقتًا على نظام Linux. إذا كنت تعمل على نظام Windows، فستحتاج إلى تعديله إلى دليل موجود في البيئة المحلية، مثل: C:\tmp، D:\tmp، إلخ.
مثال حي
#يشمل
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها، فإنه يقوم بإنشاء ملف test.txt جديد في الدليل / tmp. ويكتب على سطرين باستخدام وظيفتين مختلفتين. دعونا نقرأ هذا الملف بعد ذلك.
اقرأ الملف
فيما يلي أبسط وظيفة لقراءة حرف واحد من ملف:
int fgetc ( FILE * fp );
تقوم الدالة fgetc () بقراءة حرف من ملف الإدخال الذي يشير إليه fp. القيمة المرجعة هي حرف القراءة وEOF في حالة حدوث خطأ. تتيح لك الوظيفة التالية قراءة سلسلة من الدفق:
char *fgets ( char *buf , int n , FILE *fp );
تقرأ الدالة fgets () أحرف n-1 من دفق الإدخال الموجه بواسطة fp. يقوم بنسخ سلسلة القراءة إلى المخزن المؤقت ويضيف حرفًا فارغًا في النهاية لإنهاء السلسلة.
إذا واجهت هذه الوظيفة حرفًا متقطعًا '\ n' أو EOF في نهاية الملف قبل قراءة الحرف الأخير، فسيتم إرجاعها فقط إلى أحرف القراءة، بما في ذلك فواصل الأسطر. يمكنك أيضًا استخدام الدالة int fscanf (FILE * fp, const char * format,...) لقراءة السلسلة من الملف، ولكنها تتوقف عن القراءة عند مواجهة المسافة الأولى وفاصل الأسطر.
مثال حي
#يشمل
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها، فإنه يقرأ الملفات التي تم إنشاؤها في القسم السابق، وينتج النتائج التالية:
1: هذا 2: يتم اختبار fprintf ...
3: هذا اختبار لـ fputs ...
أولاً، تقوم طريقة fscanf() بقراءة هذا فقط. لأنها تواجه مسافة في الخلف. ثانيًا، قم باستدعاء functon fgets () لقراءة الجزء المتبقي حتى نهاية السطر. أخيرًا، قم باستدعاء fgets () لقراءة الصف الثاني بالكامل.
وظيفة الإدخال/الإخراج الثنائية
يتم استخدام الوظيفتين التاليتين للإدخال والإخراج الثنائي:
size_t fread (void *ptr , size_t size_of_elements , size_t number_of_elements , FILE *a_file ); size_t fwrite (const void *ptr، size_t size_of_elements، size_t number_of_elements، FILE *a_file)؛
تتم قراءة وكتابة كلتا الوظيفتين لكتل التخزين - عادةً المصفوفات أو الهياكل.
فيما يلي معلومات عن قراءة وكتابة ملفات C مملوكة لشركة HDV Phoelectron Technology Ltd.، وهي عملية فنية برمجية. وشركة المعدات المتعلقة بالشبكات (مثل: ACONU/ تواصلONU/ ذكيONU/ الفيبرONU، وما إلى ذلك) جمعت فريقًا برمجيًا قويًا، لكل عميل يقوم بتخصيص المتطلبات الحصرية التي يحتاجها، كما يجعل منتجاتنا أكثر ذكاءً وتقدمًا.