फाइल कॉपी ऑपरेशन
C में एक फाइल से दूसरी फाइल में डेटा कॉपी करने के लिए स्टैंडर्ड I/O फंक्शन्स (fgetc, fputc) का उपयोग किया जाता है।
फाइल ऑपरेशन के चरण
- नाम देना: फाइल का नाम निर्दिष्ट करना।
- खोलना:
fopen()से उचित मोड में खोलना। - पढ़ना: स्रोत फाइल से डेटा पढ़ना (
fgetc,freadआदि)। - लिखना: लक्ष्य फाइल में डेटा लिखना (
fputc,fwriteआदि)। - बंद करना:
fclose()से दोनों फाइल्स बंद करना।
मोड्स
"r"- पढ़ने के लिए (फाइल मौजूद होनी चाहिए)"w"- लिखने के लिए (नई बनती है, पुरानी मिट जाती है)"a"- जोड़ने के लिए (अंत में लिखता है)
पूर्ण C प्रोग्राम
#include <stdio.h>
#include <stdlib.h> // exit() के लिए
int main() {
FILE *fptr1, *fptr2;
char filename[100];
int ch; // EOF के लिए int उपयोग करें, char नहीं
// स्रोत फाइल
printf("पढ़ने के लिए फाइल नाम: ");
scanf("%99s", filename);
fptr1 = fopen(filename, "r");
if (fptr1 == NULL) {
printf("फाइल '%s' नहीं खुल सकी।\n", filename);
return 1;
}
// लक्ष्य फाइल
printf("लिखने के लिए फाइल नाम: ");
scanf("%99s", filename);
fptr2 = fopen(filename, "w");
if (fptr2 == NULL) {
printf("फाइल '%s' नहीं बन सकी।\n", filename);
fclose(fptr1);
return 1;
}
// कॉपी लूप
while ((ch = fgetc(fptr1)) != EOF) {
fputc(ch, fptr2);
}
printf("\nसामग्री '%s' में कॉपी हो गई।\n", filename);
fclose(fptr1);
fclose(fptr2);
return 0;
}
आउटपुट उदाहरण
पढ़ने के लिए फाइल नाम: source.txt लिखने के लिए फाइल नाम: dest.txt सामग्री 'dest.txt' में कॉपी हो गई।
सुधार और सर्वोत्तम अभ्यास
बेहतर संस्करण (बफर के साथ)
#define BUFFER_SIZE 4096
void copyFile(FILE *src, FILE *dest) {
char buffer[BUFFER_SIZE];
size_t bytes;
while ((bytes = fread(buffer, 1, BUFFER_SIZE, src)) > 0) {
fwrite(buffer, 1, bytes, dest);
}
}
यह एक-एक वर्ण के बजाय ब्लॉक में कॉपी करता है, जो बहुत तेज होता है।
सामान्य त्रुटियाँ और समाधान
| त्रुटि | कारण | समाधान |
|---|---|---|
| सेगमेंटेशन फॉल्ट | NULL पॉइंटर पर fgetc/fputc | fopen के बाद NULL जांचें |
| अनंत लूप | char ch; EOF -1 है, char अनसाइन्ड हो सकता है | int ch उपयोग करें |
| डेटा हानि | फाइल बंद न करना | हमेशा fclose() कॉल करें |