خاصية "الكتابة إلى الملفات" في لغة C تسمح للبرنامج بحفظ البيانات بشكل دائم على جهاز التخزين، مثل القرص الصلب. بدلاً من أن تفقد البيانات عند إغلاق البرنامج، يمكنك كتابتها إلى ملف ثم قراءتها لاحقًا عند الحاجة. هذه الخاصية ضرورية لتطبيقات عديدة، مثل محررات النصوص، وقواعد البيانات، وبرامج معالجة الصور.
كيف تعمل الكتابة إلى الملفات في C؟
تعتمد لغة C على مفهوم "مجرى البيانات" (stream) للتعامل مع الملفات. مجرى البيانات هو عبارة عن قناة يتم من خلالها نقل البيانات بين البرنامج والملف. للكتابة إلى ملف، نستخدم مجرى بيانات من نوع FILE*
ونقوم بفتحه في وضع الكتابة.
الخطوات الأساسية للكتابة إلى ملف في C:
-
تضمين المكتبة القياسية: يجب تضمين المكتبة
stdio.h
التي تحتوي على الدوال اللازمة للتعامل مع الملفات:C#include <stdio.h>
-
فتح الملف: نستخدم الدالة
fopen()
لفتح الملف. تأخذ هذه الدالة وسيطين: اسم الملف، ونمط الفتح. أنماط الفتح الشائعة للكتابة هي:"w"
: فتح الملف للكتابة. إذا كان الملف موجودًا، سيتم مسح محتواه. إذا لم يكن موجودًا، سيتم إنشاؤه."a"
: فتح الملف للإضافة. سيتم إضافة البيانات الجديدة إلى نهاية الملف."wb"
: فتح الملف للكتابة في الوضع الثنائي (binary mode).
مثال:
CFILE *filePointer;filePointer = fopen("myFile.txt", "w"); // فتح الملف "myFile.txt" للكتابةif (filePointer == NULL) {printf("Error opening file!\n");return 1; // إنهاء البرنامج مع إظهار خطأ} -
الكتابة إلى الملف: نستخدم الدوال التالية للكتابة إلى الملف:
fprintf()
: تشبه الدالةprintf()
، ولكنها تكتب إلى الملف بدلاً من الشاشة.fputc()
: لكتابة حرف واحد إلى الملف.fputs()
: لكتابة سلسلة نصية إلى الملف.fwrite()
: لكتابة بيانات خام (بايتات) إلى الملف.
مثال:
Cfprintf(filePointer, "This is a line of text.\n"); // كتابة نص إلى الملفfputs("Another line of text.\n", filePointer); // كتابة نص آخرchar myChar = 'A';fputc(myChar, filePointer); // كتابة حرف واحدint numbers[3] = {1, 2, 3};fwrite(numbers, sizeof(int), 3, filePointer); //كتابة مصفوفة من الأرقام -
إغلاق الملف: من المهم جدًا إغلاق الملف بعد الانتهاء من الكتابة باستخدام الدالة
fclose()
لتحرير الموارد وضمان حفظ البيانات بشكل صحيح.Cfclose(filePointer);
مثال كامل:
#include <stdio.h>
int main() { FILE *filePointer; filePointer = fopen("output.txt", "w");
if (filePointer == NULL) { printf("Error opening file!\n"); return 1; }
fprintf(filePointer, "Hello, this is a test.\n"); fprintf(filePointer, "This is another line.\n");
fclose(filePointer);
printf("Data written to file successfully.\n");
return 0;}
هذا البرنامج سيقوم بإنشاء ملف باسم "output.txt" ويكتب فيه السطرين المحددين.
ملاحظات مهمة:
- التحقق من قيمة
fopen()
: من الضروري دائمًا التحقق من القيمة المرجعة منfopen()
. إذا كانتNULL
، فهذا يعني أن هناك خطأ في فتح الملف (مثل عدم وجود الملف أو عدم وجود صلاحيات الكتابة). - الوضع الثنائي (Binary Mode): استخدام الوضع
"wb"
ضروري عند كتابة بيانات غير نصية، مثل الصور والملفات الصوتية، لمنع حدوث مشاكل في تفسير البيانات..