文件操作:FILE指针、文件操作函数如何使用+5种例子演示

基本操作

在C语言中,使用文件操作功能通常涉及以下步骤:

  1. 包含头文件
    首先,你需要包含 stdio.h 头文件,因为所有的标准I/O函数(包括文件操作函数)都定义在这个头文件中。

    #include <stdio.h>
    
  2. 打开文件
    使用 fopen 函数打开文件。你需要指定文件名和打开模式(如 “r” 用于读取,“w” 用于写入,“a” 用于追加等)。

    FILE *file = fopen("filename.txt", "r"); // 打开文件用于读取
    if (file == NULL) {
        perror("打开文件失败");
        return 1; // 返回非零值表示错误
    }
    

    如果文件不存在或无法打开,fopen 将返回 NULL,并可以通过 perror 函数打印出错误信息。
    打开模式
    不同的文件打开模式决定了文件如何被访问。常用的模式有:

    • "r":只读模式。
    • "w":写入模式(如果文件不存在则创建它,如果文件已存在则删除它的内容)。
    • "a":追加模式(如果文件不存在则创建它,如果文件已存在则追加到文件末尾)。
    • "r+":读写模式(从文件开头开始)。
    • "w+":读写模式(与 “w” 相同,但允许读取)。
    • "a+":读写模式(与 “a” 相同,但允许读取)。
    • "rb""wb""ab""r+b""w+b""a+b":二进制模式(与上面的文本模式相同,但用于二进制文件)。
  3. 读取或写入文件
    根据打开模式,你可以使用不同的函数来读取或写入文件。

    • 读取文本文件:fgets, fscanf
    • 写入文本文件:fputs, fprintf
    • 读取二进制文件:fread
    • 写入二进制文件:fwrite

    例如,读取文本文件:

    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), file)) {
        printf("%s", buffer);
    }
    

    写入文本文件:

    fprintf(file, "这是写入文件的内容\n");
    
  4. 文件位置控制(可选):
    如果需要,可以使用 fseekftellrewind 等函数来控制文件位置。

    • fseek:用于设置文件位置指针。
    • ftell:返回当前文件位置指针的位置。
    • rewind:将文件位置指针重置到文件开头。

文件定位(如果需要):
如果你想在文件中移动位置(例如,从文件中间开始读取或写入),你可以使用 fseek 函数。

 fseek(file, 10, SEEK_SET); // 从文件开头向后移动10个字节

获取文件状态信息
使用 ftell 函数可以获取当前文件位置指示器的位置。

long position = ftell(file); // 获取当前位置
  1. 关闭文件
    使用 fclose 函数关闭文件。这是一个重要的步骤,因为它会确保所有的数据都被正确地写入磁盘,并释放与文件关联的所有资源。
 fclose(file); // 关闭文件
  1. 错误处理
    始终检查 fopen 的返回值,以确保文件已成功打开。如果 fopen 返回 NULL,则表示打开文件失败。

完整示例

#include <stdio.h>

int main() {
    FILE *file;
    char buffer[1024];

    // 打开文件用于读取
    file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("打开文件失败");
        return 1;
    }

    // 读取并打印文件内容
    while (fgets(buffer, sizeof(buffer), file)) {
        printf("%s", buffer);
    }

    // 关闭文件
    fclose(file);
    file = NULL;
    return 0;
}

注意事项

  • 确保你有足够的权限来读取或写入文件。
  • 读取文件时,要注意缓冲区的大小,以防止缓冲区溢出。
  • 写入文件时,要注意写入的数据类型和格式,以确保数据被正确地写入文件。
  • 在使用完文件后,始终使用fclose关闭文件,以释放资源并避免潜在的问题。
  • 如果文件操作可能失败(例如,文件不存在或磁盘空间不足),请确保你的代码能够妥善处理这些错误情况。

例子1:读取文件内容

#include <stdio.h>

int main() {
    FILE *file;
    char line[1024];

    file = fopen("example.txt", "r"); // 以只读模式打开文件
    if (file == NULL) {
        perror("打开文件失败");
        return 1;
    }

    // 逐行读取文件并打印
    while (fgets(line, sizeof(line), file)) {
        printf("%s", line);
    }

    fclose(file); // 关闭文件
    file = NULL;
    return 0;
}

例子2:写入文件内容

#include <stdio.h>

int main() {
    FILE *file;

    file = fopen("output.txt", "w"); // 以写入模式打开文件
    if (file == NULL) {
        perror("打开文件失败");
        return 1;
    }

    // 写入多行文本到文件
    fprintf(file, "这是第一行文本\n");
    fprintf(file, "这是第二行文本\n");

    fclose(file); // 关闭文件
    file = NULL;
    return 0;
}

例子3:追加文件内容

#include <stdio.h>

int main() {
    FILE *file;

    file = fopen("example.txt", "a"); // 以追加模式打开文件
    if (file == NULL) {
        perror("打开文件失败");
        return 1;
    }

    // 追加文本到文件末尾
    fprintf(file, "这是追加到文件末尾的文本\n");

    fclose(file); // 关闭文件
    file = NULL;
    return 0;
}

例子4:读取并写入文件内容(复制文件)

#include <stdio.h>

int main() {
    FILE *source, *dest;
    char ch;

    source = fopen("source.txt", "r"); // 打开源文件
    if (source == NULL) {
        perror("打开源文件失败");
        return 1;
    }

    dest = fopen("destination.txt", "w"); // 打开目标文件
    if (dest == NULL) {
        fclose(source); // 释放源文件句柄
        perror("打开目标文件失败");
        return 1;
    }

    // 从源文件读取内容并写入到目标文件
    while ((ch = fgetc(source)) != EOF) {
        fputc(ch, dest);
    }

    fclose(source); // 关闭源文件
    source = NULL;
    fclose(dest);   // 关闭目标文件
    dest = NULL;
    return 0;
}

例子5:使用二进制模式读写文件

#include <stdio.h>

int main() {
    FILE *file;
    unsigned char buffer[1024];
    size_t n;

    // 以二进制写入模式打开文件
    file = fopen("binary_file.bin", "wb");
    if (file == NULL) {
        perror("打开文件失败");
        return 1;
    }

    // 写入一些二进制数据到文件
    unsigned int data = 0x12345678;
    fwrite(&data, sizeof(data), 1, file);

    fclose(file); // 关闭文件

    // 以二进制读取模式重新打开文件
    file = fopen("binary_file.bin", "rb");
    if (file == NULL) {
        perror("打开文件失败");
        return 1;
    }

    // 从文件中读取二进制数据
    n = fread(buffer, sizeof(unsigned char), sizeof(buffer), file);
    if (n > 0) {
        // 假设我们读取了整个unsigned int的数据
        if (n >= sizeof(unsigned int)) {
            unsigned int *read_data = (unsigned int*)buffer;
            printf("读取到的数据是: 0x%X\n", *read_data);
        }
    }

    fclose(file); // 关闭文件
    file = NULL;
    return 0;
}
  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值