फाइल के प्रकार
C में फाइल्स को मुख्यतः दो श्रेणियों में बांटा जाता है:
- टेक्स्ट फाइल (Text File)
- बाइनरी फाइल (Binary File)
टेक्स्ट फाइल (Text File)
- मानव-पठनीय (human-readable) वर्णों में डेटा संग्रहीत करती है।
- प्रत्येक वर्ण आमतौर पर 1 बाइट लेता है (ASCII/UTF-8)।
- संख्याएँ अपने वर्ण प्रतिनिधित्व में संग्रहीत होती हैं (उदाहरण:
4567→ 4 बाइट्स: '4','5','6','7')। - नई लाइन (
\n) का अनुवाद होता है (Windows:\r\n↔\n)। - साधारण टेक्स्ट एडिटर (Notepad, VS Code) से खोलकर देख/संपादित कर सकते हैं।
- उदाहरण:
.txt,.c,.h,.csv,.json,.html।
बाइनरी फाइल (Binary File)
- मेमोरी में डेटा के बिट-स्तरीय प्रतिनिधित्व को सीधे डिस्क पर लिखती है।
- मानव-पठनीय नहीं; विशेष सॉफ्टवेयर चाहिए।
- संख्याएँ अपने आंतरिक बाइनरी रूप में संग्रहीत होती हैं (उदाहरण:
int 4567→ 4 बाइट्स कच्चा बाइनरी)। - कोई वर्ण अनुवाद नहीं होता; बाइट्स जैसे के तैसे लिखे/पढ़े जाते हैं।
- आकार में छोटी और पढ़ने/लिखने में तेज।
- उदाहरण:
.exe,.jpg,.mp3,.pdf,.dat, डेटाबेस फाइल्स।
तुलना तालिका
| विशेषता | टेक्स्ट फाइल | बाइनरी फाइल |
|---|---|---|
| पठनीयता | मानव-पठनीय | मशीन-पठनीय |
| संग्रहण प्रारूप | वर्ण-आधारित | बाइट-आधारित (कच्चा) |
| संख्या संग्रहण | वर्णों के रूप में (अधिक स्थान) | बाइनरी रूप में (कम स्थान) |
| नई लाइन हैंडलिंग | OS-निर्भर अनुवाद | कोई अनुवाद नहीं |
| संपादन | किसी भी टेक्स्ट एडिटर से | हेक्स एडिटर/विशेष सॉफ्टवेयर |
| पोर्टेबिलिटी | उच्च (एन्कोडिंग पर निर्भर) | एंडियनेस/आर्किटेक्चर पर निर्भर |
| गति | धीमी (पार्सिंग आवश्यक) | तेज (सीधा मेमोरी मैप) |
| C मोड | "r", "w", "a" | "rb", "wb", "ab" |
C में उदाहरण
टेक्स्ट फाइल लिखना/पढ़ना
// लिखना
FILE *fp = fopen("data.txt", "w");
fprintf(fp, "%d %f %s\n", 42, 3.14, "Hello");
fclose(fp);
// पढ़ना
fp = fopen("data.txt", "r");
int a; float b; char s[20];
fscanf(fp, "%d %f %s", &a, &b, s);
बाइनरी फाइल लिखना/पढ़ना
struct Record { int id; float score; char name[20]; };
// लिखना
FILE *fp = fopen("data.bin", "wb");
struct Record r = {1, 95.5, "Alice"};
fwrite(&r, sizeof(r), 1, fp);
fclose(fp);
// पढ़ना
fp = fopen("data.bin", "rb");
struct Record r2;
fread(&r2, sizeof(r2), 1, fp);
फाइल एक्सेस विधियाँ
- अनुक्रमिक (Sequential): डेटा क्रम से पढ़ा/लिखा जाता है (टेप की तरह)।
fgetc,freadक्रमिक हैं। - यादृच्छिक एक्सेस (Random Access): किसी भी स्थान पर सीधे जा सकते हैं।
fseek(),ftell(),rewind()उपयोग होते हैं। बाइनरी फाइल्स में अधिक प्रभावी।
कौन सा चुनें?
- टेक्स्ट फाइल: कॉन्फिगरेशन, लॉग्स, CSV, JSON, स्रोत कोड, अंतरोपयोगिता (interoperability) जब प्राथमिकता हो।
- बाइनरी फाइल: उच्च प्रदर्शन, बड़ी संख्यात्मक डेटा, संरचनाएं, छवियाँ, ऑडियो, डेटाबेस, जब फाइल केवल आपके प्रोग्राम द्वारा पढ़ी जाए।