Lesson 12 — Intermediate
File Handling in C
Program band hote hi memory data le jaati — agar save nahi kiya toh sab gaya. File handling se data disk pe chala jaata hai aur agle din wapas aa jaata hai. Is lesson mein hum FILE pointer, fopen ke modes, reading/writing aur file seek karne ka poora khel dekhenge.
FILE pointer aur fopen ke modes
WHAT
C mein file = FILE structure ka pointer (FILE *f). fopen() file kholta hai aur pointer deta hai, fclose() band karta hai. stdio.h sab functions deta hai.
WHEN
Program band karne ke baad data chahiye (reports, records, logs, settings) — tab file. RAM ka data volatile hai, file permanent.
WHERE
Har jagah — bank statement generate karna, log file likhna, CSV padhna, config save karna. Data science pipeline ka pehla step bhi file reading hai.
Mode Kya karta hai
"r" READ — file exist nahi toh error (NULL)
"w" WRITE — naya banata hai, PURANA content MITA deta hai!
"a" APPEND — end mein add, purana safe
"r+" READ+WRITE — purana content safe (shuru se)
"w+" READ+WRITE — purana content WIPE (naya banega)
"a+" READ+APPEND — end mein add + padh bhi sakte ho
#include <stdio.h>
int main() {
FILE *f = fopen("data.txt", "w");
if (f == NULL) {
printf("File nahi khuli!\n");
return 1;
}
fprintf(f, "Hello File\n");
fclose(f);
return 0;
}
// data.txt ke andar: Hello File
Writing aur reading ke functions
#include <stdio.h>
int main() {
// WRITE
FILE *f = fopen("marks.txt", "w");
fprintf(f, "Rahul 88\nSia 92\n");
fclose(f);
// READ
FILE *g = fopen("marks.txt", "r");
char name[50]; int marks;
while (fscanf(g, "%s %d", name, &marks) != EOF)
printf("%s -> %d\n", name, marks);
fclose(g);
return 0;
}
Output:
Rahul -> 88
Sia -> 92
- fprintf/fscanf: printf/scanf jaisa bas target file. Format specifiers wahi (%d, %s...).
- fputs/fgets: line-based. fgets(buf, size, f) safe hai (size limit hai).
- fputc/fgetc: ek-ek character. fgetc return karta hai, EOF tak chalao.
- EOF: file khatam ka marker — fscanf/fgetc loop ka signal.
// Character by character — file reverse logic ka base
int ch;
FILE *f = fopen("data.txt", "r");
while ((ch = fgetc(f)) != EOF)
putchar(ch);
fclose(f);
// Single line safe read:
char line[100];
while (fgets(line, sizeof(line), f))
printf("%s", line); // \n line mein pehle se hota hai
fseek, ftell, rewind — file ke andar ghoomna
#include <stdio.h>
int main() {
FILE *f = fopen("data.txt", "w+");
fprintf(f, "Namaste DSWallah");
fseek(f, 0, SEEK_END); // end pe jao
printf("Size = %ld bytes\n", ftell(f)); // 15
fseek(f, 0, SEEK_SET); // shuru pe wapas
printf("First = %c\n", fgetc(f)); // N
rewind(f); // phir se start (0 pe)
printf("First = %c\n", fgetc(f)); // N
fclose(f);
return 0;
}
Output:
Size = 15 bytes
First = N
First = N
- fseek(f, offset, base): file pointer set. Base: SEEK_SET (shuru), SEEK_CUR (abhi), SEEK_END (aakhir).
- ftell(f): current position (byte number) — file size nikalne ka tareeka.
- rewind(f): pehle jaisa shuru pe. fseek(f, 0, SEEK_SET) ka chhota version.
- Kahan: random access records, file ke beech se padhna, file size report.
Complete program — write + read cycle
#include <stdio.h>
int main() {
// 1. File banao aur likho
FILE *f = fopen("namaste.txt", "w");
if (!f) { printf("Write fail\n"); return 1; }
fputs("Namaste DSWallah\n", f);
fputs("File handling mazedaar hai\n", f);
fclose(f); // flush + release
// 2. File padho
f = fopen("namaste.txt", "r");
if (!f) { printf("Read fail\n"); return 1; }
char line[100];
while (fgets(line, sizeof(line), f))
printf("%s", line);
fclose(f);
return 0;
}
Output:
Namaste DSWallah
File handling mazedaar hai
- Har fopen ka fclose: buffer flush nahi hua toh data disk pe nahi pahuncha (program crash = data loss).
- NULL check: fopen fail ho sakta hai (permission, path galat, disk full). Andha chalna = crash.
- "w" vs "a": report pehli baar ban rahi hai = "w", roz ka log add ho raha hai = "a".
- Mode samjho: "r" padhne, "w" naya likhne, "a" jodne ke liye — exam mein order poochha jaata hai.
Exercise
Question: fopen("f.txt", "w") se purana file content kya hota hai — bacha rehta hai ya mit jaata hai?
Question: File ke END tak pahunchne ke liye fseek ka base argument kaunsa hai?
Question: File ko band (close) karne wala function ka naam?
Question: fopen fail hone par kya return hota hai? (NULL / 1 / 0)
Common mistakes
- Mode "w" ka matlab bhool jaana: "w" purana data mita deta hai. Data jodna hai toh "a" — warna pichli baar ki file gayab.
- fclose nahi karna: Bina close ke buffer flush nahi hota — data aadha reh sakta hai. Har fopen ka ek fclose.
- fopen ka NULL check na karna: File nahi khuli toh FILE* NULL — uspe fprintf = crash. Hamesha if (f == NULL) check.
School ka register bhi file handling jaisa hai — naya saal = naya register (w), roz ka entry = end mein jodo (a), aur purana padhna = (r):
#include <stdio.h>
int main() {
// Aaj ki entry — APPEND (purana bachega)
FILE *f = fopen("attendance.txt", "a");
fprintf(f, "Rahul: Present\n");
fclose(f);
// Poora register padho
char line[100];
f = fopen("attendance.txt", "r");
while (fgets(line, sizeof(line), f)) printf("%s", line);
fclose(f);
return 0;
}- TCS NQT: fopen modes (r/w/a) ka difference — 1Q fixed poochha jaata hai.
- College exam: file se marks padhkar average nikalne wala program — classic.
- GATE: text vs binary mode, seek modes (SEEK_SET/CUR/END).
- Trap: "fopen ke baad check kiye bina file chal jayegi" — galat, NULL check zaroori.
File handling clear. Agla lesson — Dynamic Memory — mein seekhenge program chalte waqt memory kaise milti hai (malloc/free).