6.3 Ανάγνωση αρχείων στην C

Στο προηγούμενο κεφάλαιο, γράψαμε σε ένα αρχείο χρησιμοποιώντας τις λειτουργίες w και a στη συνάρτηση fopen().

Για να διαβάσετε από ένα αρχείο, μπορείτε να χρησιμοποιήσετε τη λειτουργία r:

#include <stdio.h>

int main() {
    FILE *fptr;
    char c;

    fptr = fopen("file.txt", "r");

    while ((c = fgetc(fptr)) != EOF) {
        printf("%c", c);
    }

    fclose(fptr);

    return 0;
}

Σε αυτό το παράδειγμα, χρησιμοποιούμε τη συνάρτηση fopen() για να ανοίξουμε το αρχείο "file.txt" σε λειτουργία ανάγνωσης ("r"). Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση fgetc() για να διαβάσουμε το αρχείο χαρακτήρα-χαρακτήρα. Χρησιμοποιούμε τη συνθήκη while για να συνεχίσουμε την ανάγνωση του αρχείου όσο δεν έχουμε φτάσει στο τέλος του. Κάθε φορά που διαβάζουμε έναν χαρακτήρα, τον εκτυπώνουμε με τη συνάρτηση printf(). Τέλος, κλείνουμε το αρχείο με τη συνάρτηση fclose().

Στη συνέχεια, πρέπει να δημιουργήσουμε ένα string που να είναι αρκετά μεγάλο για να μπορεί να αποθηκεύσει το περιεχόμενο του αρχείου.

Για παράδειγμα, ας δημιουργήσουμε ένα string που μπορεί να αποθηκεύσει έως 100 χαρακτήρες:

#include <stdio.h>

int main() {
    FILE *fptr;
    char str[100];

    fptr = fopen("file.txt", "r");

    fgets(str, 100, fptr);

    printf("%s", str);

    fclose(fptr);

    return 0;
}

Σε αυτό το παράδειγμα, έχουμε δημιουργήσει έναν πίνακα χαρακτήρων str με μέγεθος 100. Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση fgets() για να διαβάσουμε τα πρώτα 99 χαρακτήρες από το αρχείο "file.txt" και να τα αποθηκεύσουμε στον πίνακα str. Το τρίτο όρισμα της συνάρτησης fgets() καθορίζει τον μέγιστο αριθμό χαρακτήρων που πρέπει να διαβαστούν από το αρχείο. Τέλος, εκτυπώνουμε το περιεχόμενο του πίνακα str με τη συνάρτηση printf() και κλείνουμε το αρχείο με τη συνάρτηση fclose().

[adinserter block=”2″]

Για να διαβάσετε κάθε γραμμή του αρχείου, μπορείτε να χρησιμοποιήσετε ένα βρόχο while:

#include <stdio.h>

int main() {
    FILE *fptr;
    char str[100];

    fptr = fopen("file.txt", "r");

    while (fgets(str, 100, fptr) != NULL) {
        printf("%s", str);
    }

    fclose(fptr);

    return 0;
}

Σε αυτό το παράδειγμα, χρησιμοποιούμε τη συνάρτηση fgets() εντός της συνθήκης while για να διαβάσουμε κάθε γραμμή του αρχείου "file.txt". Η συνάρτηση fgets() επιστρέφει την επόμενη γραμμή του αρχείου και επιστρέφει την τιμή NULL όταν φτάσει στο τέλος του αρχείου. Εκτυπώνουμε κάθε γραμμή που διαβάζουμε με τη συνάρτηση printf(). Τέλος, κλείνουμε το αρχείο με τη συνάρτηση fclose().

Εάν προσπαθήσετε να ανοίξετε ένα αρχείο για ανάγνωση που δεν υπάρχει, η συνάρτηση fopen() θα επιστρέψει την τιμή NULL.

Σαν καλή πρακτική, μπορούμε να χρησιμοποιήσουμε μια δομή if για να ελέγξουμε αν η τιμή της συνάρτησης επιστρέφει την τιμή NULL και να εκτυπώσουμε κάποιο κείμενο αντί αυτού (όταν το αρχείο δεν υπάρχει):

#include <stdio.h>

int main() {
    FILE *fptr;
    char str[100];

    fptr = fopen("nonexistent.txt", "r");

    if (fptr == NULL) {
        printf("Unable to open file.\n");
        return 1;
    }

    while (fgets(str, 100, fptr) != NULL) {
        printf("%s", str);
    }

    fclose(fptr);

    return 0;
}

Σε αυτό το παράδειγμα, έχουμε προσθέσει έναν έλεγχο με μια δομή if για να ελέγξουμε αν η συνάρτηση fopen() επιστρέφει την τιμή NULL. Εάν αυτό συμβαίνει, τυπώνουμε το κείμενο "Unable to open file." και επιστρέφουμε την τιμή 1 για να δείξουμε ότι κάτι δεν πήγε καλά. Εάν το αρχείο ανοίγει με επιτυχία, διαβάζουμε το περιεχόμενό του και εκτυπώνουμε τις γραμμές, όπως κάναμε και προηγουμένως. Τέλος, κλείνουμε το αρχείο με τη συνάρτηση fclose().

[adinserter block=”3″]

Με αυτό κατά νου, μπορούμε να δημιουργήσουμε έναν πιο βιώσιμο κώδικα εάν χρησιμοποιήσουμε ξανά το παράδειγμα μας “ανάγνωσης αρχείου” παραπάνω:

#include <stdio.h>

int main() {
    FILE *fptr;
    char str[100];
    char filename[20];

    printf("Enter the filename: ");
    scanf("%s", filename);

    fptr = fopen(filename, "r");

    if (fptr == NULL) {
        printf("Unable to open file.\n");
        return 1;
    }

    while (fgets(str, 100, fptr) != NULL) {
        printf("%s", str);
    }

    fclose(fptr);

    return 0;
}

Σε αυτό το παράδειγμα, ζητάμε από τον χρήστη να εισαγάγει το όνομα του αρχείου που θέλει να διαβάσει. Αυτό επιτυγχάνεται χρησιμοποιώντας τη συνάρτηση scanf(), όπως φαίνεται στο παράδειγμα. Έπειτα, ελέγχουμε αν η συνάρτηση fopen() επιστρέφει την τιμή NULL και εκτυπώνουμε το κατάλληλο μήνυμα αντί για το περιεχόμενο του αρχείου, εάν αυτό δεν είναι δυνατόν. Εάν το αρχείο ανοίγει με επιτυχία, διαβάζουμε το περιεχόμενό του και εκτυπώνουμε τις γραμμές, όπως κάναμε και προηγουμένως. Τέλος, κλείνουμε το αρχείο με τη συνάρτηση fclose().

Δωρεα μεσω Paypal

Για την κάλυψη αναγκών φιλοξενίας και δημιουργίας περιεχομένου.

κατηγοριες μαθηματων

Ιστορικο ενοτητων

top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων