C भाषा मा फाइल लेखनको पूर्ण मार्गदर्शन | आधारभूतदेखि उन्नतसम्म

目次

1. परिचय

प्रोग्रामिङमा, फाइलको पढ्ने‑लेख्ने कार्य अत्यन्त महत्वपूर्ण कार्यहरूमध्ये एक हो। सी भाषामा, फाइल अपरेसनको आधारभूत रूपमा फाइल खोल्ने, डेटा लेख्ने, फाइल बन्द गर्ने क्रमलाई बुझ्न आवश्यक हुन्छ। यस लेखमा, सी भाषामा फाइल लेखन गर्नको लागि आधारभूत विधि र विशिष्ट उदाहरणहरूलाई केन्द्रित गरी व्याख्या गर्नेछौं।

फाइल लेखन डेटा स्थायित्व र अन्य प्रोग्रामहरूसँग डेटा साझेदारीका लागि प्रयोग गरिन्छ, जसले धेरै प्रोग्रामहरूमा आवश्यक कौशल बनाउँछ। साथै, सी भाषामा फाइल अपरेसन सिकेर, अन्य प्रोग्रामिङ भाषाहरूमा फाइल अपरेसन पनि सजिलै बुझ्न सकिन्छ। यस लेखमार्फत, आधारभूत लेखन विधिबाट उन्नत त्रुटि ह्यान्डलिङसम्म सिकेर, फाइल अपरेसनको समझलाई गहिरो बनाऔं।

अगामी अध्यायमा, फाइलको खोल्ने‑बन्द गर्ने अपरेसन र लेखन मोडका बारेमा आधारभूतबाट व्याख्या गर्नेछौं।

2. फाइल लेखनको मूलभूत

C भाषा मा फाइल लेख्नको लागि, पहिले फाइल खोल्ने अपरेसन आवश्यक हुन्छ। फाइल खोल्दा, “कुन उद्देश्यका लागि फाइल खोल्ने हो” भन्ने निर्दिष्ट गर्नुपर्छ। C भाषा मा fopen फङ्क्शन प्रयोग गरेर फाइल खोलिन्छ, र fclose फङ्क्शनले फाइल बन्द गर्छ। यहाँ, आधारभूत फाइल खोल्ने/बन्द गर्ने अपरेसन र लेखन मोडको बारेमा व्याख्या गरिन्छ।

fopen फङ्क्शनको प्रयोग

फाइल खोल्नको लागि, fopen फङ्क्शन प्रयोग गरिन्छ। यो फङ्क्शनले फाइलनाम र मोड (फाइल अपरेसनको प्रकार) लाई आर्गुमेन्टको रूपमा लिन्छ। fopen को आधारभूत सिन्ट्याक्स तलको जस्तै छ।

FILE *fopen(const char *filename, const char *mode);
  • filename: खोल्न चाहेको फाइलको नाम (पाथ)
  • mode: फाइल खोल्ने तरिका (लेखन, पढाइ, थप आदि)

लेखन मोडका प्रकारहरू

फाइल खोल्ने मोडमा केही प्रकारहरू छन्। यहाँ, विशेष गरी लेखनसँग सम्बन्धित मोडहरू प्रस्तुत गरिन्छ।

  • "w": लेखन-एक्लो मोड। फाइल पहिले नै अस्तित्वमा भएमा, सामग्री मेटिन्छ। नहुनु भएमा नयाँ फाइल सिर्जना हुन्छ।
  • "a": थप-एक्लो मोड। फाइल पहिले नै अस्तित्वमा भएमा, अन्त्यमा डेटा थपिन्छ। नहुनु भएमा नयाँ फाइल सिर्जना हुन्छ।
  • "wb": बाइनरी लेखन मोड। फाइल पहिले नै अस्तित्वमा भएमा, सामग्री मेटिन्छ, र बाइनरी स्वरूपमा लेखन गरिन्छ। नहुनु भएमा नयाँ फाइल सिर्जना हुन्छ।

लेखन उदाहरण

तल, फाइल नयाँ सिर्जना गरेर लेख्ने कोड उदाहरण देखाइन्छ। फाइल पहिले नै अस्तित्वमा भएमा, सामग्री मेटिन्छ, र "w" मोडमा लेखन गरिन्छ।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w"); // "w" मोडमा फाइल खोल्नुहोस्
    if (file == NULL) {
        printf("फाइल खोल्न सकिएन。
");
        return 1;
    }

    fprintf(file, "नमस्ते, C भाषा मा फाइल लेखन!\n"); // फाइलमा लेख्नुहोस्
    fclose(file); // फाइल बन्द गर्नुहोस्
    printf("फाइल लेखन सम्पन्न भयो。\n");

    return 0;
}

यस उदाहरणमा, fopen फङ्क्शनले “example.txt” नामको फाइल नयाँ सिर्जना गर्छ, र fprintf फङ्क्शन प्रयोग गरेर टेक्स्ट डेटा लेख्छ। लेखन पूरा भएपछि, fclose फङ्क्शनले फाइल अनिवार्य रूपमा बन्द गर्छ। fclose नबोलाएमा, डेटा सही रूपमा बचत नहुन सक्छ, त्यसैले फाइल प्रयोग गरेपछि अनिवार्य रूपमा बन्द गर्न नबिर्सनुहोस्।

fclose फङ्क्शनको महत्व

fclose फङ्क्शन फाइल खोलिएपछि अनिवार्य रूपमा कल गर्नुपर्ने फङ्क्शन हो। फाइल बन्द गरेर, सिस्टम स्रोतहरू मुक्त हुन्छन्, र डेटा बचत सुनिश्चित हुन्छ। फाइल बन्द नगरी प्रोग्राम समाप्त भएमा, लेखन बीचमै रोकिन सक्छ, त्यसैले अनिवार्य रूपमा fclose प्रयोग गर्ने बानी बनाऔं।

अर्को अध्यायमा, टेक्स्ट फाइलमा विशिष्ट लेखन विधिहरूलाई अझ विस्तृत रूपमा हेर्नेछौं।

3. टेक्स्ट फाइलमा लेख्ने तरिका

C भाषामा टेक्स्ट फाइलमा लेख्ने तरिकामा अक्षर स्तर, स्ट्रिङ स्तर, र फर्म्याट सहितको डेटा स्तरका ३ प्रकार छन्। प्रत्येकको लागि उपयुक्त फलनहरू उपलब्ध छन्, र प्रयोग अनुसार चयन गर्न सकिन्छ। यस सेक्सनमा, fputc, fputs, fprintf को ३ वटा फलन प्रयोग गरेर लेख्ने तरिका व्याख्या गरिन्छ।

fputc फलन द्वारा 1 अक्षर लेखन

fputc फलन १ अक्षरको रूपमा फाइलमा लेख्नको लागि प्रयोग गरिन्छ। सरल छ, मुख्यतया १ अक्षर स्तरको अपरेसन आवश्यक पर्दा प्रयोग गरिन्छ। सिन्ट्याक्स तलको जस्तै छ।

int fputc(int character, FILE *stream);
  • character: लेखन गर्न चाहेको अक्षर
  • stream: फाइल पोइन्टर

fputc को प्रयोग उदाहरण

तल फाइलमा १ अक्षरको रूपमा लेख्ने उदाहरण देखाइन्छ।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("फाइल खोल्न सकिएन。\n");
        return 1;
    }

    fputc('A', file); // 'A' लेख्नुहोस्
    fputc('B', file); // 'B' लेख्नुहोस्
    fputc('n', file); // नयाँ पंक्ति लेख्नुहोस्

    fclose(file);
    printf("अक्षर लेखन पूरा भयो。\n");

    return 0;
}

यस उदाहरणमा, फाइलमा'A''B' भन्ने दुई अक्षरलाई १ अक्षरको रूपमा लेख्दैछ। सानो डेटा लेख्दा उपयोगी फलन हो।

fputs फलन द्वारा स्ट्रिङ लेखन

fputs फलन स्ट्रिङ सम्पूर्णलाई एकै पटक लेख्नको लागि प्रयोग गरिन्छ। १ अक्षरको रूपमा लेख्न आवश्यक नहुनाले, टेक्स्ट डेटा प्रभावकारी रूपमा लेख्न सकिन्छ। सिन्ट्याक्स तलको जस्तै छ।

int fputs(const char *str, FILE *stream);
  • str: लेखन गर्न चाहेको स्ट्रिङ
  • stream: फाइल पोइन्टर

fputs को प्रयोग उदाहरण

अर्को, फाइलमा स्ट्रिङ लेख्ने उदाहरण देखाइन्छ।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("फाइल खोल्न सकिएन।\n");
        return 1;
    }

    fputs("यो fputs फङ्सनमा लेख्ने उदाहरण हो।n", file);

    fclose(file);
    printf("स्ट्रिङ लेखन पूरा भयो।\n");

    return 0;
}

यस कोडमा, fputs फलन प्रयोग गरेर, “यो fputs फलन प्रयोग गरेर लेख्ने उदाहरण हो।” भन्ने स्ट्रिङलाई एकै पटक लेख्दैछ। स्ट्रिङलाई फाइलमा प्रभावकारी रूपमा आउटपुट गर्न चाहँदा उपयुक्त छ।

fprintf फलन द्वारा फर्म्याटेड डेटा लेखन

fprintf फलन C भाषाको मानक इनपुट/आउटपुट फलन printf को फाइल संस्करण हो, र फर्म्याट निर्दिष्ट गरेर लेख्न सकिन्छ। संख्यात्मक र स्ट्रिङ सहितको जटिल डेटा स्वरूपित गरेर आउटपुट गर्न उपयोगी छ।

int fprintf(FILE *stream, const char *format, ...);
  • stream: फाइल पोइन्टर
  • format: फर्म्याट स्पेसिफायर समावेश गर्ने स्ट्रिङ

fprintf को प्रयोग उदाहरण

तलको उदाहरणमा, fprintf प्रयोग गरेर, फर्म्याटेड डेटा लेखिन्छ।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("फाइल खोल्न सकिएन।\n");
        return 1;
    }

    int number = 123;
    float decimal = 45.67;
    fprintf(file, "पूर्णांक: %d, दशमलव: %.2fn", number, decimal);

    fclose(file);
    printf("फर्म्याट गरिएको डेटा लेखन पूरा भयो।\n");

    return 0;
}

यस कोडमा, fprintf प्रयोग गरेर, इन्टिजर र दशमलवलाई स्वरूपित गर्दै फाइलमा लेख्दैछ। %d%.2f जस्ता फर्म्याट स्पेसिफायर प्रयोग गरेर, इच्छित स्वरूपमा डेटा आउटपुट गर्न सकिन्छ।

सारांश

fputc, fputs, fprintf C भाषामा टेक्स्ट फाइलमा डेटा लेख्दा उपयोगी फलनहरू हुन्। प्रयोग अनुसार चयन गरेर, प्रभावकारी र लचिलो फाइल अपरेसन गर्न सकिन्छ। अर्को अध्यायमा, बाइनरी फाइलमा लेख्ने तरिकाबारे विस्तृत रूपमा हेर्नेछौं।

4. बाइनरी फाइलमा लेख्ने तरिका

सी भाषामा, टेक्स्ट फाइल मात्र होइन बाइनरी फाइलमा पनि डेटा लेख्न सकिन्छ। बाइनरी फाइलमा लेख्ने भनेको छवि वा ध्वनि डेटा, संरचनाको डेटालाई जस्ताको तस्तै बचत गर्न चाहिने अवस्थामा उपयोगी हुन्छ। यहाँ, fwrite फङ्क्शन प्रयोग गरेर बाइनरी डेटा लेख्ने विधि र बाइनरी फाइल सञ्चालनका ध्यान दिनुपर्ने बुँदाहरू बारे व्याख्या गर्दछौं।

fwrite कार्यको प्रयोग विधि

बाइनरी डेटा लेख्दा, fwrite फङ्क्शन प्रयोग गरिन्छ। fwrite ले निर्दिष्ट मेमोरी क्षेत्रको डेटालाई जस्ताको तस्तै फाइलमा लेख्छ, त्यसैले स्ट्रिङ मात्र होइन संरचना जस्ता जटिल डेटाको लेखाइमा पनि प्रयोग गर्न सकिन्छ।

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
  • ptr: लेख्न चाहेको डेटाको पोइन्टर
  • size: लेख्ने डेटाको १ तत्वको आकार(बाइटमा)
  • count: लेख्ने तत्वहरूको संख्या
  • stream: फाइल पोइन्टर

बाइनरी मोडमा फाइल खोल्नु

बाइनरी फाइल लेख्दा, फाइल खोल्दा 「wb」 वा 「ab」 जस्ता बाइनरी मोड प्रयोग गरिन्छ। यसले टेक्स्टको लाइन ब्रेक वा विशेष अक्षरको ह्यान्डलिङ टेक्स्ट मोड भन्दा फरक हुन्छ, डेटा जस्ताको तस्तै बचत हुन्छ।

fwrite कार्य प्रयोग गरेर बाइनरी लेख्ने उदाहरण

निम्न उदाहरणमा, पूर्णाङ्कको array लाई बाइनरी फाइलमा लेखिएको छ।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.bin", "wb");
    if (file == NULL) {
        printf("फाइल खोल्न सकिएन。\n");
        return 1;
    }

    int data[] = {10, 20, 30, 40, 50};
    size_t dataSize = sizeof(data) / sizeof(data[0]);

    fwrite(data, sizeof(int), dataSize, file);

    fclose(file);
    printf("बाइनरी डेटा लेखन सम्पन्न भयो。\n");

    return 0;
}

यो उदाहरणमा, fwrite प्रयोग गरेर int प्रकारको पूर्णाङ्क array लाई बाइनरी फाइलमा जस्ताको तस्तै लेखिएको छ। डेटालाई जस्ताको तस्तै रूपमा बचत गर्नको लागि, डेटा मात्रा धेरै भए पनि कुशलतापूर्वक प्रोसेस गर्न सकिन्छ।

बाइनरी फाइलका ध्यान दिनुपर्ने बुँदाहरू

  • डेटाको अनुकूलता: बाइनरी डेटा वातावरणमा निर्भर हुने भएकाले, फरक सिस्टममा पढ्दा डेटाको व्याख्या फरक हुन सक्छ। एउटै वातावरणमा पढ्न लेख्नमा समस्या हुँदैन तर अर्को सिस्टममा ह्यान्डल गर्दा ध्यान दिनुपर्छ।
  • एन्डियन: डेटाको बचत रूप(एन्डियन)फरक वातावरणमा, बाइनरी डेटालाई सही व्याख्या गर्न नसकिने हुन सक्छ। फरक एन्डियनको वातावरणमा डेटा आदानप्रदान गर्दा, एन्डियन रूपान्तरण आवश्यक छ।
  • लाइन ब्रेकको ह्यान्डलिङ: टेक्स्ट मोड भन्दा फरक, बाइनरी मोडमा लाइन ब्रेक जस्ता विशेष अक्षरहरू स्वत: रूपान्तरित हुँदैनन्। त्यसैले, डेटा सही रूपमा जस्ताको तस्तै बचत हुन्छ।

सारांश

बाइनरी फाइलमा लेखाइ डेटालाई जस्ताको तस्तै बचत गर्न आवश्यक अवस्थामा प्रभावकारी हुन्छ। fwrite फङ्क्शन प्रयोग गरेर, कुशल र लचिलो रूपमा डेटाको बचत सम्भव हुन्छ। अर्को अध्यायमा, फाइल सञ्चालनमा महत्वपूर्ण त्रुटि ह्यान्डलिङ बारे व्याख्या गर्दछौं।

5. त्रुटि ह्यान्डलिङ

फाइल अपरेसन गर्दा, फाइलको अस्तित्व वा पहुँच अधिकारजस्ता कारणले त्रुटि उत्पन्न हुन सक्छ। यी त्रुटिहरूलाई उपयुक्त रूपमा ह्यान्डल गर्दा, अनपेक्षित व्यवहारलाई रोक्न, कार्यक्रमको विश्वसनीयता सुधार्न सकिन्छ। यस भागमा, C भाषा प्रयोग गरेर फाइल अपरेसनमा त्रुटि ह्यान्डलिङ कसरी गर्ने भन्ने बारे विस्तृत रूपमा व्याख्या गरिएको छ।

फाइल खोल्दा त्रुटि जाँच

फाइल खोल्दा, निर्दिष्ट फाइल अवस्थित नभएमा वा पहुँच अधिकार नहुनुमा, fopen फङ्क्शनले NULL फिर्ता गर्छ। यो NULL जाँच गरेर, फाइल सहीसँग खोल्न नसकेमा त्रुटि ह्यान्डलिङ सम्भव हुन्छ।

फाइल खोल्दा त्रुटि जाँचको उदाहरण

तलको उदाहरणमा, फाइल सहीसँग खोल्न नसकेमा त्रुटि सन्देश देखाइन्छ।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("फाइल खोल्न सकिएन");
        return 1;
    }

    // फाइल सञ्चालन प्रक्रिया
    fclose(file);

    return 0;
}

यस उदाहरणमा, fopen असफल भएमा perror फङ्क्शन प्रयोग गरेर त्रुटि सन्देश देखाइन्छ। perror फङ्क्शनले त्रुटिको कारण अनुसार सन्देश स्वचालित रूपमा देखाउँछ, जस उपयोगी हुन्छ।

perror फङ्क्शन र strerror फङ्क्शन प्रयोग गरेर त्रुटि सन्देशको प्रदर्शन

C भाषामा, त्रुटि सन्देश देखाउन उपयोगी फङ्क्शनहरू रूपमा perrorstrerror उपलब्ध छन्।

  • perror: मानक त्रुटि स्ट्रिम (stderr) मा निर्दिष्ट सन्देश र त्रुटि कारणलाई जोडेर आउटपुट गर्छ।
  • strerror: त्रुटि कोडलाई आर्गुमेन्टको रूपमा लिन्छ र सो कोडसँग सम्बन्धित त्रुटि सन्देश फिर्ता गर्छ।

strerror फङ्क्शन प्रयोग गरेर त्रुटि सन्देशको उदाहरण

तलमा, strerror प्रयोग गरेर त्रुटि कोडसँग सम्बन्धित सन्देश देखाउने उदाहरण दिइएको छ।

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main() {
    FILE *file = fopen("nonexistent.txt", "r");
    if (file == NULL) {
        printf("त्रुटि: %sn", strerror(errno));
        return 1;
    }

    fclose(file);
    return 0;
}

यस कोडमा, errno भेरिएबललाई strerror मा पास गरेर त्रुटि विवरण प्राप्त गरिन्छ र त्यसलाई आउटपुट गरिन्छ। errno हालको त्रुटि कोड राख्ने ग्लोबल भेरिएबल हो, र फाइल अपरेसनको त्रुटि विवरण जाँच्दा प्रयोग हुन्छ।

लेखन त्रुटि पत्ता लगाउने र समाधान विधि

फाइलमा लेख्दा पनि त्रुटि उत्पन्न हुन सक्छ। यस्तो अवस्थामा, ferror फङ्क्शन प्रयोग गरेर त्रुटि पत्ता लगाउन र समाधान गर्न सकिन्छ। ferror ले त्रुटि भएको छ कि छैन जाँच्छ र त्रुटि भएमा शून्य बाहेकको मान फिर्ता गर्छ।

लेखन त्रुटि पत्ता लगाउने उदाहरण

तलको कोडले लेखन त्रुटि उत्पन्न भएमा त्रुटि सन्देश देखाउने उदाहरण हो।

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        perror("फाइल खोल्न सकिएन");
        return 1;
    }

    if (fprintf(file, "डेटा लेखन") < 0) {
        perror("लेखन त्रुटि भयो");
        fclose(file);
        return 1;
    }

    fclose(file);
    printf("लेखन पूरा भयो।n");

    return 0;
}

यस उदाहरणमा, fprintf फङ्क्शनले नकारात्मक मान फिर्ता गरेमा, लेखन त्रुटि भएको मानिन्छ र त्रुटि सन्देश आउटपुट गरिन्छ। लेखन त्रुटि पत्ता लगाएर, डेटा सही रूपमा सुरक्षित नभएमा समाधान गर्न सकिन्छ।

सारांश

फाइल अपरेसनमा, त्रुटि ह्यान्डलिङ विश्वसनीय कार्यक्रम निर्माण गर्न अनिवार्य छ। फाइल खोल्दा वा लेख्दा त्रुटि आएमा, उपयुक्त त्रुटि सन्देश देखाएर र कार्यक्रमको कार्यलाई नियन्त्रण गरेर, सुरक्षित र मजबुत कोड लेख्न सम्भव हुन्छ। अर्को अध्यायमा, व्यावहारिक प्रयोगका उदाहरणहरू जस्तै लग फाइलमा लेख्ने र सेटिङ फाइल निर्माण गर्ने बारे व्याख्या गरिनेछ।

6. अनुप्रयोग उदाहरणहरू

फाइल लेखनको आधारभूत कुरा बुझिसकेपछि, यहाँ हामी विशिष्ट अनुप्रयोग उदाहरणहरू प्रस्तुत गर्छौं। वास्तविक प्रोग्राम विकासमा, लग फाइलमा डेटा लेखन, सेटिङ फाइलको निर्माण, साथै डेटा सिरियलाइज र डीसिरियलाइज (डेटा संरचनालाई फाइलमा बचत/पढ्ने प्रक्रिया) जस्ता फाइल अपरेसनहरू बारम्बार प्रयोग हुन्छन्। यी उदाहरणहरू मार्फत, फाइल अपरेसनलाई वास्तविक प्रोजेक्टमा कसरी उपयोग गर्न सकिन्छ भन्ने कुरा सिकौं।

लग फाइलमा डेटा लेखन

प्रोग्रामको कार्यलाई रेकर्ड गर्न लग फाइल बनाउने कुरा प्रायः गरिन्छ। त्रुटि उत्पन्न हुँदा वा प्रक्रिया स्थितिको अनुगमनको लागि लग फाइलमा जानकारी लेखेर समस्याको ट्रबलशुटिङ सजिलो हुन्छ।

लग फाइल लेखनको उदाहरण

तलको कोडले वर्तमान मिति‑समय र सन्देशलाई लग फाइलमा लेख्ने उदाहरण हो।

#include <stdio.h>
#include <time.h>

void log_message(const char *message) {
    FILE *file = fopen("log.txt", "a");
    if (file == NULL) {
        perror("लॉग फाइल खोल्न सकिएन।");
        return;
    }

    time_t now = time(NULL);
    struct tm *t = localtime(&now);

    fprintf(file, "[%04d-%02d-%02d %02d:%02d:%02d] %sn",
            t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
            t->tm_hour, t->tm_min, t->tm_sec, message);

    fclose(file);
}

int main() {
    log_message("प्रोग्राम सुरु भयो।");
    log_message("त्रुटि भयो।");

    return 0;
}

यो प्रोग्रामले log_message फलन प्रयोग गरेर log.txt फाइलमा लग लेख्छ। लगलाई थप मोड (“a”) मा खोलिने कारण, अवस्थित लग डेटा राख्दै नयाँ सन्देश थप्न सकिन्छ। साथै, मिति‑समयलाई ढाँचाबद्ध गरेर लेख्दा, सन्देश कहिले रेकर्ड भएको हो स्पष्ट हुन्छ।

सेटिङ फाइलको निर्माण

सेटिङ फाइल प्रोग्रामको सेटिङ जानकारी बचत गर्न प्रयोग गरिन्छ। उदाहरणका लागि, अनुप्रयोगको प्रारम्भिक सेटिङ वा प्रयोगकर्ताको कस्टमाइज्ड सेटिङहरू फाइलमा बचत गरी, प्रोग्राम सुरु गर्दा ती जानकारीहरू पढ्न सहज हुन्छ।

सेटिङ फाइल लेखनको उदाहरण

अर्को, साधारण सेटिङ फाइल निर्माण गर्ने कोड उदाहरण देखाइन्छ।

#include <stdio.h>

void save_settings(const char *filename, int volume, int brightness) {
    FILE *file = fopen(filename, "w");
    if (file == NULL) {
        perror("सेटिङ फाइल खोल्न सकिएन");
        return;
    }

    fprintf(file, "volume=%dn", volume);
    fprintf(file, "brightness=%dn", brightness);

    fclose(file);
}

int main() {
    save_settings("settings.conf", 75, 50);
    printf("सेटिङ फाइल सुरक्षित गरियो。n");

    return 0;
}

यो प्रोग्रामले save_settings फलनद्वारा settings.conf नामको सेटिङ फाइल बनाउँछ, र आवाज तथा चम्किलोपनको सेटिङ फाइलमा बचत गर्छ। फाइलमा “कुंजी=मान” को ढाँचामा सेटिङहरू रेकर्ड गरिन्छ, जसले पढ्न र सम्पादन गर्न सजिलो बनाउँछ।

डेटाको सिरियलाइज र डीसिरियलाइज

सिरियलाइज भनेको डेटा संरचनालाई सोझै फाइलमा बचत गर्ने विधि हो। यो डेटा फाइलमा लेखेर पछि पुनः पढ्न चाहिँदा प्रयोग गरिन्छ। उदाहरणका लागि, खेलको सेभ डेटा वा जटिल डेटा संरचनाको बचतमा प्रयोग हुन्छ।

संरचना डेटा सिरियलाइजको उदाहरण

तलको कोडले संरचनालाई बाइनरी स्वरूपमा फाइलमा बचत र पढ्ने उदाहरण हो।

#include <stdio.h>

typedef struct {
    int id;
    char name[50];
    float score;
} Student;

void save_student(const char *filename, Student *student) {
    FILE *file = fopen(filename, "wb");
    if (file == NULL) {
        perror("फाइल खोल्न सकिएन");
        return;
    }

    fwrite(student, sizeof(Student), 1, file);
    fclose(file);
}

void load_student(const char *filename, Student *student) {
    FILE *file = fopen(filename, "rb");
    if (file == NULL) {
        perror("फाइल खोल्न सकिएन");
        return;
    }

    fread(student, sizeof(Student), 1, file);
    fclose(file);
}

int main() {
    Student s1 = {1, "सातो तोरू", 89.5};
    save_student("student.dat", &s1);

    Student s2;
    load_student("student.dat", &s2);
    printf("ID: %d, नाम: %s, अंक: %.2fn", s2.id, s2.name, s2.score);

    return 0;
}

यो प्रोग्रामले Student नामको संरचनालाई बाइनरी स्वरूपमा फाइलमा बचत गर्छ, र पछि पढ्छ। save_student फलनले संरचनाको सामग्री फाइलमा लेख्छ, र load_student फलनले त्यसलाई पुनः पढ्छ। सिरियलाइज गरिएको डेटा बचत गरिएको अवस्थैमा रहन्छ, त्यसैले पछि प्रोग्राममा सोझै प्रयोग गर्न सकिन्छ।

सारांश

फाइल लेखनको अनुप्रयोग उदाहरणको रूपमा, लग फाइल, सेटिङ फाइल, र सिरियलाइज विधिहरू प्रस्तुत गर्यौं। यी अपरेसनहरूले धेरै प्रोग्रामहरूमा फाइल लेखन कसरी उपयोग हुन्छ देखाउँछन्। अर्को अध्यायमा, फाइल लेखन सम्बन्धी पाठकहरूबाट आएका प्रायः सोधिने प्रश्नहरू (FAQ) को उत्तर दिनेछौं।

7. बारम्बार सोधिने प्रश्नहरू (FAQ)

C भाषा मा फाइल लेख्दा, शुरुआतीहरूबाट अक्सर सोधिने प्रश्नहरू सङ्कलन गरेका छौं। प्रत्येक प्रश्नको समाधान विधि र ध्यान दिनुपर्ने बुँदाहरूलाई विस्तृत रूपमा व्याख्या गर्नेछौं। यी FAQ लाई सन्दर्भ गरी, फाइल अपरेसन सम्बन्धी शंका र समस्याहरू समाधान गर्नुहोस्।

फाइल खोल्न नसकेमा समाधान विधि

Q: fopen मा फाइल खोल्न सकिँदैन। के गर्नु पर्छ?

A:fopen ले NULL फिर्ता गरेमा, तलका बुँदाहरू जाँच गर्नुहोस्।

  1. फाइल पथ सही छ कि छैन: फाइल अवस्थित स्थान र प्रोग्रामले संकेत गरेको पथ मिल्छ कि मिल्दैन जाँच गर्नुहोस्।
  2. पहुँच अधिकार: फाइलको पढ्ने वा लेख्ने अनुमति छ कि छैन जाँच गर्नुहोस्। लेख्नको लागि लेख्ने अधिकार, पढ्नको लागि पढ्ने अधिकार आवश्यक हुन्छ।
  3. डिस्क क्षमता: खाली डिस्क स्थान कम भएमा, नयाँ फाइल सिर्जना गर्न सकिँदैन।
  4. perror वा strerror प्रयोग गर्नुहोस्: त्रुटिको विस्तृत जानकारीको लागि perror वा strerror उपयोगी हुन्छ। त्रुटि सन्देश देखाएर कारण पत्ता लगाउन सजिलो हुन्छ।

लेखन प्रतिबिम्बित नहुनुको कारण र समाधान

Q: फाइलमा डेटा लेखेँ तर सामग्री प्रतिबिम्बित भएको छैन।

A: फाइल लेखन प्रतिबिम्बित नहुनुमा, तलका बुँदाहरू जाँच गर्नुहोस्।

  1. fclose कार्यको प्रयोग: फाइल लेखेपछि अनिवार्य रूपमा fclose कार्यलाई कल गर्नु भएको छ? यदि fclose द्वारा फाइल बन्द नगरेमा, बफर गरिएको डेटा सही रूपमा सुरक्षित नहुन सक्छ।
  2. बफरको फ्लश: तुरुन्त लेखन प्रतिबिम्बित गर्न चाहनुहुन्छ भने, fflush कार्य प्रयोग गरी बफरलाई म्यानुअली फ्लश गर्न सकिन्छ। उदाहरणका लागि, fflush(file); प्रयोग गर्दा, लेखन बलपूर्वक प्रतिबिम्बित हुन्छ।
  3. अपरेटिङ सिस्टमको क्यास: केही OS मा फाइल अपरेसनको परिणाम ढिलाइमा प्रतिबिम्बित हुन सक्छ। लेखन पछि कार्य जाँच गर्दा, OS को क्यासलाई पनि विचार गर्नुहोस्।

बाइनरी फाइल र टेक्स्ट फाइलको भिन्नता

Q: बाइनरी फाइल र टेक्स्ट फाइलमा के फरक छ?

A: टेक्स्ट फाइल र बाइनरी फाइलमा तलका भिन्नताहरू छन्।

  1. डेटा भण्डारण स्वरूप:
  • टेक्स्ट फाइल अक्षर (टेक्स्ट) डेटा रूपमा सुरक्षित हुन्छ, र लाइनब्रेक तथा विशेष अक्षरहरू रूपान्तरण गरी सुरक्षित गरिन्छ। उदाहरणका लागि, Windows मा लाइनब्रेक “rn” रूपमा सुरक्षित हुन्छ, र UNIX प्रणालीमा “n” रूपमा सुरक्षित हुन्छ।
  • बाइनरी फाइल डेटा सोही स्वरूपमा सुरक्षित गर्छ। डेटा रूपान्तरण नहुनाले, लाइनब्रेक आदि पनि सोही रूपमा रेकर्ड हुन्छ। चित्र, आवाज, संरचना डेटा आदि सुरक्षित गर्न उपयुक्त हुन्छ।
  1. उपयोग:
  • टेक्स्ट फाइल मुख्यतया लग, सेटिङ जानकारी आदि मानिसले पढ्ने उद्देश्यले प्रयोग गरिन्छ।
  • बाइनरी फाइल मेसिनले सिधै पढ्नको लागि प्रयोग गरिन्छ, र सिरियलाइज्ड संरचना डेटा वा मिडिया फाइलहरू सुरक्षित गर्न प्रयोग हुन्छ।

फाइलमा डेटा लेख्दा त्रुटि आएमा के गर्नु पर्छ?

Q: fprintf वा fwrite प्रयोग गर्दा लेखनमा त्रुटि आयो।

A: लेखन त्रुटि फाइलको अवस्था वा सिस्टम स्रोत समस्याका कारण हुन सक्छ। तलका समाधानहरू प्रयास गर्नुहोस्।

  1. ferror कार्य प्रयोग गर्नुहोस्: फाइलमा त्रुटि छ कि छैन जाँच गर्न ferror कार्य प्रयोग गरौं। त्रुटि आएमा, ferror शून्य भन्दा बाहिरको मान फिर्ता गर्छ।
  2. त्रुटि सन्देश देखाउनुहोस्: perror कार्यले त्रुटि सन्देश देखाएर, विशिष्ट त्रुटि विवरण जाँच गर्नुहोस्।
  3. स्टोरेजको खाली स्थान जाँच गर्नुहोस्: डिस्कको खाली स्थान कम भएमा, लेखन रोकिन सक्छ। खाली स्थान जाँच गर्नुहोस्।
  4. फाइल मोड जाँच गर्नुहोस्: फाइल सही मोड (लेखन योग्य मोड) मा खोलिएको छ कि छैन जाँच गर्नुहोस्।

बाइनरी फाइलमा लेख्दा एन्डियन समस्या देखा परेमा, कसरी समाधान गर्ने?

Q: विभिन्न प्रणालीहरूमा बाइनरी फाइल साझा गर्न चाहन्छु, तर एन्डियनको भिन्नताका कारण डेटा सही रूपमा पढ्न सकिँदैन।

A: एन्डियन भनेको डेटा बाइट क्रमको भिन्नता हो। विभिन्न एन्डियन प्रणालीहरूबीच डेटा साझा गर्दा, एन्डियन रूपान्तरण आवश्यक पर्छ।

  1. एन्डियन रूपान्तरण कार्य प्रयोग गर्नुहोस्: htons वा htonl जस्ता एन्डियन रूपान्तरण कार्य प्रयोग गरी, डेटा नेटवर्क बाइट अर्डरमा रूपान्तरण गरी सुरक्षित गर्ने तरिका छ। नेटवर्क बाइट अर्डर सामान्य एन्डियन मानक हो, र धेरै प्रणालीहरूमा अनुकूलता हुन्छ।
  2. परियोजनामा समान एन्डियन प्रयोग गर्नुहोस्: निरन्तरता कायम गर्न, सबै प्रणालीहरूलाई एउटै एन्डियन प्रयोग गर्न वा फाइलमा एन्डियन जानकारी राख्ने तरिका पनि प्रभावकारी हुन्छ।
  3. एन्डियनको स्वचालित पहिचान: फाइल फर्म्याटको सुरुमा एन्डियन जानकारी सुरक्षित गरी, पढ्ने बेला प्रणालीले स्वचालित रूपमा पहिचान गरी उपयुक्त क्रममा डेटा पढ्ने गरी डिजाइन गर्न सकिन्छ।

सारांश

फाइल अपरेसन सम्बन्धी बारम्बार सोधिने प्रश्नहरू र तिनका समाधान विधिहरूको व्याख्या गर्यौं। फाइल खोल्न नसकेमा वा त्रुटि आएमा, उपयुक्त त्रुटि ह्यान्डलिङ र जाँच चरणहरू लागू गर्दा समस्या समाधानको सम्भावना बढ्छ। अर्को अध्यायमा, यस सामग्रीलाई पुनरावलोकन गरी, सिकेको ज्ञानलाई व्यवस्थित गर्नेछौं।

8. सारांश

यस लेखमा, C भाषा मा फाइल लेखन सम्बन्धी आधारभूतदेखि उन्नतसम्म विस्तृत रूपमा व्याख्या गरिएको छ। फाइल अपरेसन प्रोग्राममा डेटा स्थायी रूपमा सुरक्षित गर्न आवश्यक प्रविधि हो। सामग्रीलाई पुनरावलोकन गर्दै, फाइल लेखनसँग सम्बन्धित महत्वपूर्ण बुँदाहरूलाई व्यवस्थित गरौं।

फाइल लेखनको आधारभूत

सबैभन्दा पहिले, फाइल अपरेसनको आधारको रूपमा fopenfclose प्रयोग गरेर फाइल खोल्ने र बन्द गर्ने तरिका सिक्यौं। फाइल खोल्दा, लेखन मोड ("w", "a", "wb" आदि) निर्दिष्ट गर्न आवश्यक हुन्छ। साथै, अपरेसन पछि अनिवार्य रूपमा fclose द्वारा फाइल बन्द गर्नु डेटा को सही सुरक्षित गर्न अपरिहार्य छ।

पाठ्य फाइलमा लेखन

fputc, fputs, fprintf प्रयोग गरेर पाठ्य फाइलमा डेटा लेख्ने तरिका व्याख्या गरियो। प्रयोग अनुसार कार्यहरूलाई विभाजन गरेर, कार्यक्षम र लचिलो फाइल अपरेसन सम्भव हुन्छ। अक्षर स्तर, स्ट्रिङ स्तर, स्वरूपित डेटा स्तरमा डेटा आउटपुट गर्ने तरिका बुझेर, विभिन्न डेटा स्वरूपहरूलाई समर्थन गर्न सकिन्छ।

बाइनरी फाइलमा लेखन

fwrite प्रयोग गरेर, बाइनरी डेटा सिधै फाइलमा सुरक्षित गर्ने तरिका पनि प्रस्तुत गरियो। बाइनरी मोडमा डेटा रूपान्तरण हुँदैन, त्यसैले छवि, ध्वनि डेटा, संरचना आदि सिधै सुरक्षित गर्दा उपयोगी हुन्छ। डेटा अनुकूलता र एन्डियन समस्याहरूलाई ध्यानमा राखेर, विभिन्न वातावरणहरूबीच बाइनरी डेटा साझेदारी गर्न सम्भव हुन्छ।

त्रुटि ह्यान्डलिङ

फाइल अपरेसन गर्दा उत्पन्न हुन सक्ने त्रुटिहरूलाई सामना गर्न, perrorstrerror कार्यहरू प्रयोग गरेर त्रुटि ह्यान्डलिङ सिक्यौं। त्रुटि सन्देशलाई उपयुक्त रूपमा देखाएर, समस्याको कारण पत्ता लगाउन सजिलो हुन्छ, र विश्वसनीय प्रोग्राम निर्माणमा सहयोग पुर्याउँछ।

अनुप्रयोग उदाहरणहरू

लग फाइलमा लेखन, सेटिङ फाइल निर्माण, साथै डेटा सिरियलाइजेशन र डीसिरियलाइजेशन जस्ता व्यावहारिक फाइल अपरेसनका अनुप्रयोग उदाहरणहरू प्रस्तुत गरियो। यी उदाहरणहरू मार्फत, फाइल अपरेसनलाई वास्तविक प्रोजेक्टमा कसरी प्रयोग गर्न सकिन्छ भन्ने बुझ्न सकियो।

बारम्बार सोधिने प्रश्नहरूमा प्रतिक्रिया

FAQ को रूपमा, फाइल खोल्न नसक्ने, लेखन प्रतिबिम्बित नहुनु, बाइनरी फाइलको ह्यान्डलिङ सम्बन्धी शंकाहरूलाई समाधान गर्ने तरिकाहरू पनि व्याख्या गरियो। त्रुटि सामना गर्ने विधि र ध्यान दिनुपर्ने बुँदाहरूलाई समेटेर, व्यावहारिक समस्या समाधान क्षमताहरू विकास गर्न सकियो।

समापनमा

फाइल लेखनको आधारभूतदेखि अनुप्रयोग, त्रुटि ह्यान्डलिङसम्म समेटेर, C भाषामा फाइल अपरेसनको बुझाइलाई गहिरो बनाइ सकेको होला। फाइल अपरेसन अन्य प्रोग्रामिङ भाषाहरूमा पनि बारम्बार प्रयोग हुने प्रविधि हो, र यहाँ सिकेको सामग्री भविष्यको प्रोग्रामिङमा उपयोगी ज्ञान बनिन्छ। कृपया, यस ज्ञानलाई प्रयोग गरी, विभिन्न डेटा सुरक्षित/व्यवस्थापनमा चुनौती दिनुहोस्।