C में फ़ाइल
फ़ाइल:- C में फ़ाइल डेटा का एक संग्रह है जो स्थायी रूप से
स्टोरेज डिवाइस (हार्ड डिस्क) पर संग्रहीत होता है।
फ़ाइल का उपयोग
डेटा को स्थायी रूप से संग्रहित करने के लिए किया जाता है ताकि प्रोग्राम समाप्त
होने के बाद भी इसे बाद में उपयोग किया जा सके।
फ़ाइल के फायदे और नुकसान
फायदे
- डेटा स्थायी रूप से संग्रहीत
होता है
- प्रोग्राम समाप्त होने के बाद
डेटा को फिर से उपयोग किया जा सकता है
- बड़ी मात्रा में डेटा स्टोर कर
सकता है
- डेटा को पढ़ना और लिखना आसान
- रिकॉर्ड और डेटाबेस के लिए
उपयोगी
- बाइनरी फ़ाइल तेज़ प्रोसेसिंग
प्रदान करती है
नुकसान
- फ़ाइल हैंडलिंग मेमोरी एक्सेस की
तुलना में धीमी है
- बाइनरी फ़ाइलें मानव-पठनीय नहीं
होती
- फ़ाइल ऑपरेशन वेरिएबल्स की तुलना
में जटिल होते हैं
- यदि फ़ाइल सही तरीके से बंद नहीं
की गई, तो डेटा खो सकता है
- त्रुटि हैंडलिंग आवश्यक है
C में फ़ाइल के प्रकार
फाइल को दो
प्रकार से वर्गीकृत किया जा सकता है:
(A) स्टोरेज फॉर्मेट के आधार पर
टेक्स्ट फ़ाइल:- टेक्स्ट फ़ाइल डेटा को मानव-पठनीय रूप
में संग्रहीत करती है। डेटा को कैरेक्टर्स के रूप में सेव किया जाता है, इसलिए इसे नोटपैड जैसी एप्लिकेशन में
आसानी से खोला और पढ़ा जा सकता है। यह सरल डेटा जैसे नाम, अंक या संदेश संग्रहित करने के लिए
आमतौर पर उपयोग की जाती है। अधिक स्टोरेज स्पेस की आवश्यकता होती है और बाइनरी
फ़ाइलों की तुलना में धीमी होती है।
बाइनरी फ़ाइल:- बाइनरी फ़ाइल डेटा को बाइनरी (0 और 1) रूप में संग्रहीत करती है। यह मानव द्वारा पढ़ी नहीं जा
सकती और नोटपैड में नहीं खोली जा सकती। बाइनरी फ़ाइलें तेज़ होती हैं और टेक्स्ट
फ़ाइलों की तुलना में कम स्टोरेज स्पेस लेती हैं। मुख्य रूप से रिकॉर्ड, स्ट्रक्चर और इमेज स्टोर करने के लिए
उपयोग होती हैं।
(B) एक्सेस मेथड के आधार पर
अनुक्रमिक फ़ाइल (Sequential File):- अनुक्रमिक फ़ाइल डेटा को क्रम में
स्टोर करती है, और डेटा को एक के बाद एक रिकॉर्ड के
रूप में एक्सेस किया जाता है। किसी भी डेटा को पढ़ने के लिए हमें फ़ाइल की शुरुआत
से पढ़ना शुरू करना होगा। टेक्स्ट फ़ाइलें सामान्यतः अनुक्रमिक एक्सेस का पालन
करती हैं। सरल है लेकिन बड़ी फ़ाइलों के लिए समय लेने वाला है।
रैंडम फ़ाइल (Random File):- रैंडम फ़ाइल किसी भी स्थान से डेटा तक
सीधे पहुँच की अनुमति देती है। fseek() जैसी फ़ंक्शन का उपयोग करके हम फ़ाइल
पॉइंटर को किसी विशिष्ट स्थान पर ले जाकर डेटा सीधे पढ़ या लिख सकते हैं। यह तेज़
और कुशल है, मुख्य रूप से बाइनरी फ़ाइलों में
रिकॉर्ड-आधारित सिस्टम के लिए उपयोग होता है।
फ़ाइल पॉइंटर:- फ़ाइल पॉइंटर C में फ़ाइल को संभालने के लिए एक विशेष
पॉइंटर होता है। इसका उपयोग प्रोग्राम को फ़ाइल से जोड़ने और सभी फ़ाइल ऑपरेशन में
किया जाता है।
डिक्लेरेशन:
FILE *fp;
फ़ाइल खोलना:- फ़ाइल खोलने का मतलब प्रोग्राम और डिस्क पर संग्रहीत
फ़ाइल के बीच कनेक्शन बनाना है। fopen() फ़ंक्शन का उपयोग किया जाता है। अगर
फ़ाइल सफलतापूर्वक खुलती है, तो यह फ़ाइल
पॉइंटर लौटाता है; अन्यथा, यह NULL लौटाता है। सिंटैक्स:
fp = fopen("filename",
"mode");
टेक्स्ट फ़ाइल मोड
|
r |
टेक्स्ट फ़ाइल को पढ़ने के लिए
खोलें |
|
w |
टेक्स्ट फ़ाइल को लिखने के लिए
खोलें (पुराना डेटा मिटा दिया जाएगा) |
|
a |
टेक्स्ट फ़ाइल में डेटा जोड़ने (append) के लिए खोलें |
|
r+ |
टेक्स्ट फ़ाइल को पढ़ने और लिखने के
लिए खोलें |
|
w+ |
टेक्स्ट फ़ाइल को लिखने और पढ़ने के
लिए खोलें |
|
a+ |
टेक्स्ट फ़ाइल में डेटा जोड़ने और
पढ़ने के लिए खोलें |
बाइनरी फ़ाइल मोड
|
मोड (Mode) |
अर्थ (Meaning) |
|
rb |
बाइनरी फ़ाइल
को पढ़ने के लिए खोलें |
|
wb |
बाइनरी फ़ाइल
को लिखने के लिए खोलें |
|
ab |
बाइनरी फ़ाइल
में डेटा जोड़ने (append) के लिए खोलें |
|
rb+ |
बाइनरी फ़ाइल
को पढ़ने और लिखने के लिए खोलें |
|
wb+ |
बाइनरी फ़ाइल
को लिखने और पढ़ने के लिए खोलें |
|
ab+ |
बाइनरी फ़ाइल
में डेटा जोड़ने और पढ़ने के लिए खोलें |
फ़ाइल बंद करना
फ़ंक्शन: fclose(fp):- खुली फ़ाइल को बंद करता है, सभी डेटा सही तरीके से सेव करता है और
मेमोरी को मुक्त करता है।
टेक्स्ट फ़ाइल इनपुट/आउटपुट फ़ंक्शन
टेक्स्ट फ़ाइल में डेटा लिखने के फ़ंक्शन (Text File Output Functions)
1.
fprintf():- fprintf() का उपयोग फ़ॉर्मेटेड डेटा को टेक्स्ट फ़ाइल में लिखने के
लिए किया जाता है। यह printf() की तरह काम करता है, लेकिन आउटपुट स्क्रीन पर नहीं बल्कि
फ़ाइल में लिखा जाता है। यह संख्याएँ, अक्षर और स्ट्रिंग फ़ॉर्मेटेड तरीके से लिखने में उपयोगी
है।
सिंटैक्स:
fprintf(fp, "format string", variables);
2. fputc():- fputc() का उपयोग टेक्स्ट फ़ाइल में एक एकल अक्षर लिखने के लिए
किया जाता है। यह एक समय में एक अक्षर लिखता है और वर्तमान फ़ाइल स्थिति पर काम
करता है। यह अक्षर-दर-अक्षर फ़ाइल लिखने के लिए उपयोगी है।
सिंटैक्स:
fputc(character, fp);
3. fputs():- fputs() का उपयोग टेक्स्ट फ़ाइल में स्ट्रिंग लिखने के लिए किया
जाता है। यह पूरी स्ट्रिंग को फ़ाइल में लिखता है, लेकिन अंत में स्वचालित रूप से नई लाइन नहीं जोड़ता।
सिंटैक्स:
fputs(string, fp);
टेक्स्ट फ़ाइल से डेटा पढ़ने के फ़ंक्शन (Text File Input Functions)
1. fscanf():- fscanf() का उपयोग टेक्स्ट फ़ाइल से फ़ॉर्मेटेड डेटा पढ़ने के लिए
किया जाता है। यह scanf() की तरह काम करता है, लेकिन कीबोर्ड से नहीं बल्कि फ़ाइल से इनपुट लेता है।
इसका उपयोग संख्याएँ, अक्षर और स्ट्रिंग फ़ॉर्मेटेड रूप में
पढ़ने के लिए किया जाता है।
सिंटैक्स:
fscanf(fp, "format string", &variables);
2. fgetc():- fgetc() का उपयोग टेक्स्ट फ़ाइल से एक एकल अक्षर पढ़ने के लिए
किया जाता है। यह एक समय में एक अक्षर पढ़ता है और फ़ाइल से पढ़ा गया अक्षर लौटाता
है।
सिंटैक्स:
fgetc(fp);
3. fgets():- fgets() का उपयोग टेक्स्ट फ़ाइल से स्ट्रिंग पढ़ने के लिए किया
जाता है। यह फ़ाइल से अक्षरों को तब तक पढ़ता है जब तक नई लाइन (\n) नहीं मिलती या
दिए गए सीमा तक पहुँच नहीं जाता। इसका मुख्य उपयोग एक समय में एक लाइन पढ़ने के
लिए होता है।
सिंटैक्स:
fgets(string, size, fp);
Simple C program using fprintf() and fscanf().
#include
<stdio.h>
int main() {
FILE *fp;
int a = 50, b
= 75, x, y;
char name[20]
= "ASHOK";
char str[20];
fp = fopen("data.txt",
"w");
fprintf(fp, "%d
%d\n", a, b);
fprintf(fp, "%s\n",
name);
fclose(fp);
fp = fopen("data.txt",
"r");
fscanf(fp, "%d
%d", &x, &y);
fscanf(fp, "%s",
str);
printf("%d
%d\n", x, y);
printf("%s\n",
str);
fclose(fp);
return 0;
}
बाइनरी फ़ाइल में लेखन (Writing to Binary File)
fwrite():- fwrite() का उपयोग बाइनरी फ़ाइल में डेटा लिखने के लिए किया जाता
है। यह डेटा को बाइनरी फॉर्म में संग्रहित करता है, जो तेज़ होता है और कम स्थान लेता है। इसका सामान्य
उपयोग संख्याएँ, एरेज़ (arrays) और स्ट्रक्चर्स फ़ाइल में लिखने के
लिए किया जाता है।
सिंटैक्स:
fwrite(address, size, count, fp);
बाइनरी फ़ाइल से पढ़ना (Reading from Binary File)
fread():- fread() का उपयोग बाइनरी फ़ाइल से डेटा पढ़ने के लिए किया जाता
है। यह डेटा को उसी क्रम में पढ़ता है जिस क्रम में उसे लिखा गया था। इसका उपयोग
बाइनरी डेटा जैसे इंटीजर (integers), फ्लोट (floats), एरेज़ और स्ट्रक्चर्स प्राप्त करने के
लिए किया जाता है।
सिंटैक्स:
fread(address, size, count, fp);
fwrite() और fread() का उपयोग करने वाला साधारण C प्रोग्राम
#include
<stdio.h>
int main() {
FILE *fp;
int a = 100;
float b = 23.5;
char ch = 'X';
int x;
float y;
char z;
fp = fopen("data.bin",
"wb");
fwrite(&a,
sizeof(a), 1, fp);
fwrite(&b,
sizeof(b), 1, fp);
fwrite(&ch,
sizeof(ch), 1, fp);
fclose(fp);
fp = fopen("data.bin",
"rb");
fread(&x,
sizeof(x), 1, fp);
fread(&y,
sizeof(y), 1, fp);
fread(&z,
sizeof(z), 1, fp);
printf("%d\n%.2f\n%c\n",
x, y, z);
fclose(fp);
return 0;
}
टेक्स्ट और बाइनरी फ़ाइल में अंतर
|
विशेषता |
टेक्स्ट फ़ाइल |
बाइनरी फ़ाइल |
|
डेटा संग्रह |
पठनीय रूप
में डेटा संग्रह |
बाइनरी (0 और 1) में डेटा संग्रह |
|
पढ़ने का
माध्यम |
नोटपैड में
पढ़ी जा सकती है |
नोटपैड में
नहीं पढ़ी जा सकती |
|
उपयोग होने
वाले फ़ंक्शन |
fprintf() / fscanf() का उपयोग |
fwrite() / fread() का उपयोग |
|
स्टोरेज
स्पेस |
अधिक स्टोरेज
स्पेस की आवश्यकता |
कम स्टोरेज
स्पेस की आवश्यकता |
|
प्रदर्शन |
धीमी |
तेज़ |
रैंडम एक्सेस इन फ़ाइल
C में रैंडम एक्सेस किसी भी स्थिति पर
डेटा पढ़ने/लिखने की अनुमति देता है। मुख्य रूप से बाइनरी फ़ाइलों में उपयोग होता
है। fseek(), ftell(), rewind() फ़ंक्शन फ़ाइल पॉइंटर को किसी स्थान पर ले जाने, वर्तमान स्थिति जानने और फ़ाइल की
शुरुआत में लौटने में मदद करते हैं।
fseek()
फ़ाइल पॉइंटर
को किसी विशेष स्थिति पर ले जाता है। सिंटैक्स: fseek(fp,
offset, origin);
C program using fseek() to access a specific record in a binary file.
#include
<stdio.h>
#include
<stdlib.h>
int main() {
FILE *fp;
int numbers[5] = {10, 20, 30, 40, 50};
int num;
fp = fopen("data.bin",
"wb");
fwrite(numbers, sizeof(int), 5, fp);
fclose(fp);
fp = fopen("data.bin",
"rb");
fseek(fp, 2 * sizeof(int), SEEK_SET);
fread(&num, sizeof(int), 1, fp);
printf("%d\n", num);
fclose(fp);
return 0;
}
ftell():- फ़ाइल पॉइंटर की वर्तमान स्थिति लौटाता है।
सिंटैक्स: ftell(fp);
rewind():- फ़ाइल पॉइंटर को शुरुआत में ले जाता है।
सिंटैक्स: rewind(fp);
No comments:
Post a Comment