📁
File I/O

File Handling Basics

FILE*, fopen, fclose
💡 File handle karna ek library book issue karne jaisa hai — pehle "issue" karo (fopen), padho/likho (fread/fwrite), aur "return" karo (fclose) jab kaam khatam ho jaaye. Book return kiye bina library ko pata nahi chalega ki wo free hai.

C mein files handle karne ke liye <stdio.h> ka FILE* type use hota hai — ye ek "file pointer" hai jo file ke saath ek connection (stream) represent karta hai. fopen(filename, mode) file kholta hai aur ek FILE* return karta hai (ya NULL agar fail ho jaaye).

Modes: "r" (read), "w" (write — agar file exist karti hai to overwrite, warna nayi banao), "a" (append — end mein add karo), aur inke binary versions "rb"/"wb"/"ab" binary files ke liye. fclose(fp) file ko band karta hai — ye zaroori hai, kyunki bina close kiye, buffered data disk par likha hi nahi jaata.

#include <stdio.h>

int main() {
  FILE *fp = fopen("data.txt", "w");

  if (fp == NULL) {
    printf("File nahi khul payi!\n");
    return 1;
  }

  fprintf(fp, "Hello, File!\n");

  fclose(fp);  // zaroori — warna data disk par save nahi hoga
  return 0;
}
📁
File handle karna ek library book issue karne jaisa hai — pehle "issue" karo (fopen), padho/likho (fread/fwrite), aur "return" karo (fclose) jab kaam khatam ho jaaye. Book return kiye bina library ko pata nahi chalega ki wo free hai.
1 / 6
⚡ Quick Recap
  • FILE* = file ke saath connection (stream)
  • fopen(name, mode) → NULL check zaroori
  • fclose() bhoolna = buffered data disk par save nahi hoga
Is page mein (2 subtopics)

"r"/"w"/"a" text mode mein file kholte hain — Windows par ye automatically newline characters (\n ↔ \r\n) translate karte hain. "rb"/"wb"/"ab" binary mode mein koi translation nahi hota — raw bytes exactly waise hi likhe/padhe jaate hain jaise hain. Structs ya images jaisa non-text data hamesha binary mode mein handle karo.

FILE *fp1 = fopen("notes.txt", "w");   // text mode
FILE *fp2 = fopen("image.bin", "wb");  // binary mode — no translation

struct Record { int id; float score; };
struct Record r = {1, 95.5};

FILE *fp3 = fopen("records.dat", "wb");
fwrite(&r, sizeof(struct Record), 1, fp3);  // raw bytes likho
fclose(fp3);
💡Tip: Linux/Mac par text aur binary mode mein practically koi farq nahi hota (koi newline translation hi nahi hoti) — lekin cross-platform code likhte waqt sahi mode use karna best practice hai.

fopen(filename, "r") NULL return karega agar file exist nahi karti — ye sabse simple tareeka hai file existence check karne ka bina koi extra library ke.

FILE *fp = fopen("config.txt", "r");
if (fp == NULL) {
  printf("File exist nahi karti\n");
} else {
  printf("File mil gayi!\n");
  fclose(fp);
}
⚠️Common Mistake: fopen(filename, "w") se check mat karo — "w" mode file na hone par usse CREATE kar dega (ya existing file ko overwrite kar dega)! Existence check ke liye hamesha "r" mode use karo.