Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्राम: एक फाइल की सामग्री दूसरी फाइल में कॉपी करना


फाइल कॉपी ऑपरेशन

C में एक फाइल से दूसरी फाइल में डेटा कॉपी करने के लिए स्टैंडर्ड I/O फंक्शन्स (fgetc, fputc) का उपयोग किया जाता है।

फाइल ऑपरेशन के चरण

  1. नाम देना: फाइल का नाम निर्दिष्ट करना।
  2. खोलना: fopen() से उचित मोड में खोलना।
  3. पढ़ना: स्रोत फाइल से डेटा पढ़ना (fgetc, fread आदि)।
  4. लिखना: लक्ष्य फाइल में डेटा लिखना (fputc, fwrite आदि)।
  5. बंद करना: 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/fputcfopen के बाद NULL जांचें
अनंत लूपchar ch; EOF -1 है, char अनसाइन्ड हो सकता हैint ch उपयोग करें
डेटा हानिफाइल बंद न करनाहमेशा fclose() कॉल करें
  1. C प्रोग्राम में लिंक्ड लिस्ट के अंत से nवें नोड को ढूंढना C प्रोग्राम में लिंक्ड लिस्ट के अंत से nवें नोड को ढूंढना

    n नोड्स दिए जाने पर, लिंक्ड लिस्ट के अंत से nवें नोड को प्रिंट करना है। प्रोग्राम को लिस्ट में नोड्स का क्रम नहीं बदलना चाहिए, बल्कि केवल लिंक्ड लिस्ट के अंत से nवें नोड को प्रिंट करना चाहिए। उदाहरण इनपुट: 10 20 30 40 50 60, N=3 आउटपुट: 40 उपरोक्त उदाहरण में, पहले नोड से शुरू करके count-n नोड्स त

  1. C प्रोग्राम में वृत्त के अंदर अंकित दशभुज का क्षेत्रफल C प्रोग्राम में वृत्त के अंदर अंकित दशभुज का क्षेत्रफल

    समस्या विवरण यहां हम देखेंगे कि वृत्त के अंदर मौजूद दशभुज का क्षेत्रफल कैसे प्राप्त करें। त्रिज्या दी गई है। दशभुज की भुजा a है। सूत्र क्षेत्रफल = (5 * r² * (3 - √5) * (√5 + 2√5)) / 4 C++ प्रोग्राम उदाहरण #include <iostream> #include <cmath> using namespace std; float area(float r) {

  1. - पायथन प्रोग्राम: एक सरणी के सभी तत्वों को दूसरी सरणी में कॉपी करना

    जब एक सरणी से दूसरी सरणी में सभी तत्वों को कॉपी करने की आवश्यकता होती है, तो None तत्वों के साथ एक खाली सरणी बनाई जाती है। तत्वों पर पुनरावृत्ति करने के लिए एक साधारण फॉर लूप का उपयोग किया जाता है, और नई सूची में मान असाइन करने के लिए = ऑपरेटर का उपयोग किया जाता है। उदाहरण my_list_1 = [34, 56, 78,