الدرس العاشر: الملفات في لغة C (Files)
مرحبًا بك في الدرس العاشر من سلسلة تعلم لغة C. بعد أن تعلمنا الهياكل، الآن سنستكشف موضوعًا مهمًا جدًا وهو الملفات في لغة C. الملفات تتيح لك حفظ البيانات بشكل دائم على القرص، وقراءتها أو تعديلها لاحقًا، بدلاً من تخزينها مؤقتًا في الذاكرة فقط.
ما هي الملفات؟
الملفات هي وسيلة لتخزين البيانات خارج البرنامج على القرص الصلب. يمكن أن تحتوي على نصوص، أرقام، أو أي بيانات أخرى. عند استخدام الملفات، يمكنك قراءة البيانات أو كتابتها بحيث تظل محفوظة حتى بعد إغلاق البرنامج.
أهمية الملفات
- تخزين البيانات بشكل دائم.
- تمكين البرامج من قراءة البيانات لاحقًا عند الحاجة.
- مشاركة البيانات بين برامج مختلفة.
- إدارة البيانات الكبيرة التي لا يمكن الاحتفاظ بها في الذاكرة فقط.
أنواع الملفات في C
هناك نوعان رئيسيان من الملفات:
- الملفات النصية (Text Files): تحتوي على بيانات قابلة للقراءة من قبل الإنسان.
- الملفات الثنائية (Binary Files): تحتوي على بيانات مخزنة بشكل ثنائي (غير قابلة للقراءة المباشرة).
فتح الملفات
قبل استخدام أي ملف، يجب فتحه باستخدام الدالة fopen():
#include <stdio.h>
int main() {
FILE *file;
file = fopen("data.txt", "w"); // فتح ملف للكتابة
if (file == NULL) {
printf("خطأ في فتح الملف!\\n");
return 1;
}
fclose(file);
return 0;
}
أنماط الفتح الشائعة:
"r": للقراءة."w": للكتابة (سيتم إنشاء الملف أو مسح المحتوى الحالي)."a": للإلحاق (إضافة محتوى جديد دون مسح القديم)."r+": للقراءة والكتابة."w+": للقراءة والكتابة مع مسح المحتوى الحالي."a+": للقراءة والكتابة مع الإلحاق.
كتابة البيانات في الملفات
يمكنك استخدام الدالة fprintf() لكتابة نصوص إلى ملف:
#include <stdio.h>
int main() {
FILE *file = fopen("data.txt", "w");
if (file == NULL) return 1;
fprintf(file, "مرحبًا بالعالم!\\n");
fprintf(file, "هذا مثال على كتابة البيانات في ملف.\\n");
fclose(file);
return 0;
}
قراءة البيانات من الملفات
للقراءة، يمكنك استخدام fscanf() أو fgets():
#include <stdio.h>
int main() {
char buffer[100];
FILE *file = fopen("data.txt", "r");
if (file == NULL) return 1;
while(fgets(buffer, 100, file) != NULL) {
printf("%s", buffer);
}
fclose(file);
return 0;
}
مثال عملي كامل
#include <stdio.h>
int main() {
FILE *file;
// فتح الملف للكتابة
file = fopen("students.txt", "w");
if (file == NULL) {
printf("خطأ في فتح الملف!\\n");
return 1;
}
fprintf(file, "Ali,20,95.5\\n");
fprintf(file, "Sara,19,88.0\\n");
fclose(file);
// فتح الملف للقراءة
file = fopen("students.txt", "r");
if (file == NULL) return 1;
char name[50];
int age;
float grade;
while(fscanf(file, "%[^,],%d,%f\\n", name, &age, &grade) != EOF) {
printf("الاسم: %s, العمر: %d, الدرجة: %.2f\\n", name, age, grade);
}
fclose(file);
return 0;
}
التعامل مع الأخطاء
- تأكد دائمًا من فحص إذا كان الملف مفتوحًا بنجاح.
- استخدم
NULLللتحقق من الفشل عند الفتح. - قم بإغلاق الملف بعد الانتهاء باستخدام
fclose().
تمارين عملية للمبتدئين
- إنشاء ملف وحفظ قائمة بالأسماء فيه.
- كتابة برنامج يقرأ الأسماء ويطبعها على الشاشة.
- إضافة درجات الطلاب وحفظها في الملف، ثم حساب المتوسط عند القراءة.
- تجربة استخدام الإلحاق (append) لإضافة بيانات جديدة دون مسح القديم.
- إنشاء ملف ثنائي وحفظ بيانات الطلاب فيه وقراءتها لاحقًا.
مشاريع صغيرة مقترحة
- برنامج لإدارة بيانات الطلاب وحفظها في ملفات نصية.
- برنامج لتسجيل بيانات المنتجات وقراءتها لاحقًا.
- برنامج لتخزين إعدادات المستخدم في ملف والتحميل عند بدء التشغيل.