白骑士的C语言教学进阶篇 2.4 文件操作

系列目录

上一篇:白骑士的C语言教学进阶篇 2.3 结构体与联合体

        文件操作是编程中的一项重要技能,它允许程序与外部文件进行交互。通过文件操作,我们可以读取数据文件、写入结果文件,并对文件进行各种操作。本节将介绍如何在C语言中打开和关闭文件、读写文件以及文件指针和缓冲的使用。

打开与关闭文件

        在C语言中,文件操作由 ‘FILE‘ 类型的指针进行管理。使用 ‘fopen‘ 函数打开文件,‘fclose‘ 函数关闭文件。

打开文件

        ‘fopen‘ 函数用于打开文件。它接受两个参数:文件名和模式(如读、写、追加等),并返回一个‘FILE‘指针,例如。

FILE *filePtr;

filePtr = fopen("example.txt", "r");

if (filePtr == NULL) {
    printf("Failed to open the file.\n");

    return 1;
}

        常见的文件打开模式:

  • ‘"r"‘:以只读模式打开文件。如果文件不存在,则返回 ‘NULL‘;
  • ‘"w"‘:以写入模式打开文件。如果文件不存在,则创建文件;如果文件存在,则清空文件内容;
  • ‘"a"‘:以追加模式打开文件。如果文件不存在,则创建文件;
  • ‘"r+"‘:以读写模式打开文件。如果文件不存在,则返回 ‘NULL‘;
  • ‘"w+"‘:以读写模式打开文件。如果文件不存在,则创建文件;如果文件存在,则清空文件内容;
  • ‘"a+"‘:以读写模式打开文件。如果文件不存在,则创建文件。

关闭文件

        ‘fclose‘ 函数用于关闭文件。它接受一个 ‘FILE‘ 指针作为参数,例如。

if (fclose(filePtr) != 0) {
    printf("Failed to close the file.\n");

    return 1;
}

读写文件

        文件的读写操作可以通过 ‘fscanf‘ 和 ‘fprintf‘(用于格式化输入输出)、‘fgets‘ 和 ‘fputs‘(用于字符串读写)、以及 ‘fread‘ 和 ‘fwrite‘(用于二进制读写)等函数实现。

读文件

        使用‘fscanf‘从文件中读取格式化数据,例如:

int number;

fscanf(filePtr, "%d", &number);

printf("Read number: %d\n", number);

        使用 ‘fgets‘ 从文件中读取字符串:  

char buffer[100];

fgets(buffer, 100, filePtr);

printf("Read string: %s\n", buffer);

写文件

        使用 ‘fprintf‘ 向文件写入格式化数据,例如:

fprintf(filePtr, "%d", 42);

        使用‘fputs‘向文件写入字符串:

fputs("Hello, world!\n", filePtr);

二进制读写

        使用 ‘fread‘ 和 ‘fwrite‘ 进行二进制文件操作,例如:

int data[5] = {1, 2, 3, 4, 5};

fwrite(data, sizeof(int), 5, filePtr);

int readData[5];

fread(readData, sizeof(int), 5, filePtr);

文件指针与缓冲

        文件指针和缓冲区用于管理文件读写操作中的位置和效率。

文件指针

        文件指针(file pointer)是指向文件当前读写位置的指针。可以使用 ‘fseek‘、‘ftell‘ 和 ‘rewind‘ 函数操作文件指针。

fseek(filePtr, 0, SEEK_END);   // 移动到文件末尾

long fileSize = ftell(filePtr); // 获取文件大小

rewind(filePtr);               // 重置文件指针到文件开头

        ‘fseek‘ 的第二个参数指定偏移量,第三个参数指定基准位置(‘SEEK_SET‘、‘SEEK_CUR‘、‘SEEK_END‘)。

文件缓冲

        缓冲区用于提高文件操作效率。C语言提供了‘setbuf‘和‘setvbuf‘函数用于控制文件缓冲区,例如:

char buffer[BUFSIZ];

setbuf(filePtr, buffer);  // 设置全缓冲

        ‘setvbuf‘ 函数允许更精细的缓冲区控制,例如:

setvbuf(filePtr, buffer, _IOFBF, BUFSIZ);  // 设置全缓冲
setvbuf(filePtr, buffer, _IOLBF, BUFSIZ);  // 设置行缓冲
setvbuf(filePtr, buffer, _IONBF, BUFSIZ);  // 设置无缓冲

示例代码

        以下是一个综合示例,展示了文件的打开与关闭、读写操作以及文件指针和缓冲的使用,例如:

#include <stdio.h>
#include <stdlib.h>


int main() {
    FILE *filePtr;
    filePtr = fopen("example.txt", "w+");

    if (filePtr == NULL) {
        printf("Failed to open the file.\n");

        return 1;
    }

    // 写文件
    fprintf(filePtr, "Hello, world!\n");
    fputs("This is a test.\n", filePtr);

    // 移动文件指针到文件开头
    rewind(filePtr);

    // 读文件
    char buffer[100];

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

    // 关闭文件
    if (fclose(filePtr) != 0) {
        printf("Failed to close the file.\n");

        return 1;
    }

    return 0;
}

总结

        通过本节的学习,你已经了解了C语言中的文件操作基本概念,包括如何打开和关闭文件、读写文件、以及文件指针和缓冲的使用。掌握这些技能,可以更有效地处理文件操作,提高程序的数据处理能力。

下一篇:白骑士的C语言教学进阶篇 2.5 C标准库​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值