🔴 Advanced  ·  Lesson 37

File Read और Write

पढ़ने-लिखने के चार तरीके

File खुलने के बाद (fopen/fclose के लिए देखें file handling basics), C data अंदर-बाहर करने के चार तरीके देता है। हर एक अलग रूप के data के लिए उपयुक्त है:

स्तरWrite / Readकिसके लिए
Characterfputc / fgetcएक बार में एक char
Linefputs / fgetsText lines
Formattedfprintf / fscanfमिश्रित values / records
Binaryfwrite / freadStructs, arrays, कच्चा data

Character I/O: fgetc और fputc

fputc एक character लिखता है; fgetc एक पढ़ता है, file के अंत पर EOF लौटाते हुए।

C Language
FILE *fp = fopen("data.txt", "w");
fputc('H', fp); fputc('i', fp);      // do char likhein
fclose(fp);

fp = fopen("data.txt", "r");
int ch;
while ((ch = fgetc(fp)) != EOF)      // ant tak padhein
    putchar(ch);
fclose(fp);
Output:
Hi

Line I/O: fgets और fputs

fputs एक string लिखता है; fgets एक line को fixed buffer में सुरक्षित पढ़ता है।

C Language
FILE *fp = fopen("note.txt", "w");
fputs("Hello file\n", fp);
fputs("Second line\n", fp);
fclose(fp);

fp = fopen("note.txt", "r");
char line[100];
while (fgets(line, sizeof(line), fp) != NULL)
    printf("%s", line);
fclose(fp);
Output:
Hello file
Second line
💡 fgets सुरक्षित है

fgets buffer size लेता है, तो यह कभी आपके array के पार नहीं लिखता। पुराने असुरक्षित gets के बजाय इसे पसंद करें।

Formatted I/O: fscanf और fprintf

मिश्रित types वाले records (name, age, marks) के लिए, fprintf और fscanf printf/scanf जैसे काम करते हैं पर file पर।

C Language
FILE *fp = fopen("rec.txt", "w");
fprintf(fp, "%s %d\n", "Aman", 95);   // record likhein
fclose(fp);

fp = fopen("rec.txt", "r");
char name[20]; int marks;
fscanf(fp, "%s %d", name, &marks);    // wapas padhein
printf("%s scored %d\n", name, marks);
fclose(fp);
Output:
Aman scored 95

Binary I/O: fread और fwrite

पूरे structure को ठीक वैसे store करने को जैसे वह memory में है, fwrite और fread के साथ binary mode इस्तेमाल करें।

C Language
struct Student { char name[20]; int marks; };
struct Student s = {"Ravi", 88};

FILE *fp = fopen("s.dat", "wb");      // wb = write binary
fwrite(&s, sizeof(s), 1, fp);
fclose(fp);

struct Student r;
fp = fopen("s.dat", "rb");            // rb = read binary
fread(&r, sizeof(r), 1, fp);
printf("%s %d\n", r.name, r.marks);
fclose(fp);
Output:
Ravi 88

कौन सा तरीका इस्तेमाल करें?

  • Character — files copy करना, characters गिनना, सरल filters।
  • Line — text files line-by-line पढ़ना (logs, config)।
  • Formatted — मिश्रित fields वाले पढ़ने योग्य records।
  • Binary — structs/arrays तेज़ और compact सहेजना, पढ़ने के लिए नहीं।

आम गलतियाँ

  • fgetc को int के बजाय char से तुलना करना — EOF को int चाहिए
  • Binary data के लिए text mode या उल्टा इस्तेमाल करना।
  • जो struct layout लिखा उससे अलग layout से पढ़ना (binary files layouts में portable नहीं)।
  • Read/write की return value errors के लिए जाँचना भूलना।
🏋️ अभ्यास

fprintf से तीन student records लिखें, फिर fscanf से loop में सब वापस पढ़ें जब तक वह matches लौटाना बंद न करे। फिर वही fwrite/fread से करें और file sizes की तुलना करें।

सारांश

  • C के चार I/O स्तर: character, line, formatted और binary।
  • fgetc/fputc एकल characters संभालते हैं; EOF तक loop करें।
  • fgets/fputs lines सुरक्षित संभालते हैं।
  • fprintf/fscanf पढ़ने योग्य records; fwrite/fread कच्चा binary।
  • वह स्तर चुनें जो आपके data और पढ़ने-योग्यता की ज़रूरत से मेल खाए।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

C में files पढ़ने-लिखने के अलग-अलग तरीके क्या हैं?
C चार स्तर देता है: एक-एक character fgetc/fputc से, एक-एक line fgets/fputs से, formatted values fscanf/fprintf से, और कच्चे binary blocks fread/fwrite से। आप वही चुनते हैं जो आपके data के रूप से मेल खाए।
fprintf और fwrite में क्या अंतर है?
fprintf पढ़ने योग्य text लिखता है — numbers "42" जैसे characters बनते हैं — तो file किसी भी editor में खुल सकती है। fwrite data के कच्चे bytes वैसे ही लिखता है जैसे वे memory में हैं, जो compact और तेज़ है पर text के रूप में पढ़ने योग्य नहीं। Text files के लिए fprintf, binary के लिए fwrite।
C में fgets क्या करता है?
fgets file से एक line को character array में पढ़ता है, newline पर या buffer भरने पर रुकते हुए, और newline character रखता है। यह पुराने functions से सुरक्षित है क्योंकि आप अधिकतम size बताते हैं, तो यह buffer overflow नहीं करेगा।
मुझे fprintf के बजाय fread और fwrite कब इस्तेमाल करने चाहिए?
fread/fwrite तब इस्तेमाल करें जब पूरे structures या arrays जैसा data ठीक वैसे ही store करना हो जैसे वह memory में है — यह text से तेज़ और छोटा है। fprintf/fscanf तब जब file पढ़ने योग्य हो या दूसरे programs से साझा हो।
C में पूरी file character-by-character कैसे पढ़ें?
आप fgetc को loop में call करते हैं और तब रुकते हैं जब वह विशेष value EOF लौटाए, जो file का अंत दर्शाता है। हर call अगला character लौटाता है, तो loop पूरी file में एक-एक character चलता है।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।