【C語言】文件讀寫函數使用

綜合描述按字符,按行,按塊讀寫方式。
#include <stdio.h>
#include <string.h>

void fileCharWrite() {
    FILE *file_write = fopen("./test01.txt", "w");
    if (!file_write) {
        //ERROR: No such file or directory
        perror("ERROR");
        return;
    }

    char ch = 'a';

    for (int i = 0; i < 5; ++i) {
        fputc(ch, file_write);
    }

    fclose(file_write);

}


void fileCharRead() {
    FILE *file_read = fopen("./test01.txt", "r");
    if (!file_read) {
        perror("ERROR");
        return;
    }

    //注意此時會體現出feof()的滯後性,最後會將EOF標識符賦予ch,或可在賦值後進行if判斷,避免EOF
    // while(!feof(file_read))
    // {
    // 	char ch = fgetc(file_read);
    // 	printf("%c\n", ch);
    // }

    //以下方式亦可避免
    char ch;
    while ((ch = fgetc(file_read)) != EOF) {
        printf("%c\n", ch);
    }

    fclose(file_read);

}


//按行
void fileLineReadWrite() {
    //寫
    FILE *file_write = fopen("./test02.txt", "w");
    if (!file_write) {
        perror("ERROR");
        return;
    }

    char *arr[] = {
            "鋤禾日當午\n",
            "汗滴禾下土\n",
            "誰知盤中餐\n",
            "粒粒皆辛苦\n"
    };

    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
        fputs(arr[i], file_write);
    }

    fclose(file_write);


    //讀
    FILE *file_read = fopen("./test02.txt", "r");
    if (!file_read) {
        perror("ERROR");
        return;
    }

    char temp[100] = {0};
    while (fgets(temp, 100, file_read)) {
        printf("%s", temp);
    }

    fclose(file_read);

}


//按塊
void fileBlockReadWrite() {
    //寫
    FILE *file = fopen("./test03.txt", "w");
    if (!file) {
        perror("ERROR");
        return;
    }

    char *arr[] = {
            "鋤禾日當午\n",
            "汗滴禾下土\n",
            "誰知盤中餐\n",
            "粒粒皆辛苦\n"
    };

    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
        fwrite(arr[i], strlen(arr[i]), 1, file);
    }

    fclose(file);


    //讀
    file = fopen("./test03.txt", "r");
    if (!file) {
        perror("ERROR");
        return;
    }

    char temp[100] = {0};
    while (fread(temp, strlen(arr[0]), 1, file)) {
        printf("%s", temp);
    }

    fclose(file);

}


void test() {
    //fileCharWrite();
    //fileCharRead();
    //fileLineReadWrite();
    fileBlockReadWrite();

}

int main(int argc, char const *argv[]) {
    test();
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章