自学内容网 自学内容网

C 语言文件读写操作详解

目录

C 语言文件读写操作详解

引言

1. 文件操作基本概念

2. 文件打开

3. 文件关闭

4. 文件写入

5. 文件读取

6. 逐行读取文件

7. 文件定位

8. 文件大小

9. 二进制文件读写


C 语言文件读写操作详解

引言

C 语言提供了丰富的文件操作函数,使得读取和写入文件变得非常方便。本文将详细介绍 C 语言中常用的文件读写操作,包括文件打开、关闭、读取和写入等基本操作,并提供具体的示例代码。

1. 文件操作基本概念

在 C 语言中,文件操作主要通过 FILE 类型的指针来实现。FILE 是一个结构体类型,定义在 <stdio.h> 头文件中。文件操作的基本流程通常包括以下几个步骤:

  1. 打开文件
  2. 读取或写入文件
  3. 关闭文件
2. 文件打开

使用 fopen 函数打开文件。fopen 函数的原型如下:

FILE *fopen(const char *filename, const char *mode);
  • filename:要打开的文件名。
  • mode:打开文件的模式,常见的模式有:
    • "r":只读模式,文件必须存在。
    • "w":写入模式,如果文件存在则清空内容,如果文件不存在则创建新文件。
    • "a":追加模式,如果文件存在则在文件末尾追加内容,如果文件不存在则创建新文件。
    • "rb""wb""ab":以二进制模式打开文件,分别对应只读、写入和追加模式。

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    // 文件操作...
    fclose(file);
    return 0;
}
3. 文件关闭

使用 fclose 函数关闭文件。fclose 函数的原型如下:

int fclose(FILE *stream);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    // 文件操作...
    fclose(file);
    return 0;
}
4. 文件写入

使用 fprintf 函数向文件写入格式化的字符串。fprintf 函数的原型如下:

int fprintf(FILE *stream, const char *format, ...);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fprintf(file, "Hello, World!\n");
    fclose(file);
    return 0;
}
5. 文件读取

使用 fscanf 函数从文件读取格式化的字符串。fscanf 函数的原型如下:

int fscanf(FILE *stream, const char *format, ...);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    char buffer[100];
    fscanf(file, "%s", buffer);
    printf("读取的内容: %s\n", buffer);
    fclose(file);
    return 0;
}
6. 逐行读取文件

使用 fgets 函数逐行读取文件。fgets 函数的原型如下:

char *fgets(char *str, int n, FILE *stream);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("读取的内容: %s", buffer);
    }
    fclose(file);
    return 0;
}
7. 文件定位

使用 fseek 函数移动文件指针的位置。fseek 函数的原型如下:

int fseek(FILE *stream, long offset, int whence);
  • offset:偏移量。
  • whence:偏移的参考位置,常见的值有:
    • SEEK_SET:文件开头。
    • SEEK_CUR:当前位置。
    • SEEK_END:文件末尾。

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    char buffer[100];
    fseek(file, 10, SEEK_SET); // 移动到第10个字节
    fgets(buffer, sizeof(buffer), file);
    printf("读取的内容: %s", buffer);
    fclose(file);
    return 0;
}
8. 文件大小

使用 ftell 函数获取文件指针的当前位置,从而计算文件大小。ftell 函数的原型如下:

long ftell(FILE *stream);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fseek(file, 0, SEEK_END);
    long size = ftell(file);
    printf("文件大小: %ld 字节\n", size);
    fclose(file);
    return 0;
}
9. 二进制文件读写

使用 freadfwrite 函数读写二进制文件。freadfwrite 函数的原型如下:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

示例代码:

#include <stdio.h>

struct Person {
    char name[50];
    int age;
};

int main() {
    struct Person person = {"Alice", 30};
    FILE *file = fopen("data.bin", "wb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fwrite(&person, sizeof(struct Person), 1, file);
    fclose(file);

    struct Person read_person;
    file = fopen("data.bin", "rb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fread(&read_person, sizeof(struct Person), 1, file);
    printf("读取的内容: 名字=%s, 年龄=%d\n", read_person.name, read_person.age);
    fclose(file);
    return 0;
}

原文地址:https://blog.csdn.net/licy__/article/details/143701566

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!