Shaw0xyz 发表于 2024-6-23 12:06:12

C语言 - 文件操作

本帖最后由 Shaw0xyz 于 2024-6-23 15:47 编辑

1. 引言

C语言是一门功能强大且灵活的编程语言,在系统级编程和嵌入式开发中应用广泛。文件操作是C语言的重要功能之一,它允许程序读取和写入文件,从而实现数据的持久化存储。在本篇文章中,我们将详细介绍C语言中的文件操作,包括文件的打开、读取、写入和关闭等基本操作。

1.1 文件的打开与关闭

在C语言中,文件操作通常需要包含头文件<stdio.h>。文件的打开使用fopen函数,文件的关闭使用fclose函数。

1.1.1 文件的打开

fopen函数用于打开一个文件,并返回一个指向该文件的文件指针。函数原型如下:

FILE *fopen(const char *filename, const char *mode);

参数说明:
(1) filename:要打开的文件名。
(2) mode:文件打开模式,如"r"(只读)、"w"(写入)等。

示例代码:

FILE *file = fopen("example.txt", "r");
if (file == NULL) {
    printf("无法打开文件\n");
    return 1;
}

1.1.2 文件的关闭

fclose函数用于关闭一个打开的文件,释放相关资源。函数原型如下:

int fclose(FILE *stream);

参数说明:
(1) stream:要关闭的文件指针。

示例代码:

fclose(file);

1.2 文件的读取操作

C语言提供了多种文件读取方式,常用的包括fgetc、fgets和fread函数。

1.2.1 使用fgetc读取单个字符

fgetc函数用于从文件中读取一个字符。函数原型如下:

int fgetc(FILE *stream);

示例代码:

FILE *file = fopen("example.txt", "r");
if (file != NULL) {
    int ch;
    while ((ch = fgetc(file)) != EOF) {
      putchar(ch);
    }
    fclose(file);
}

1.2.2 使用fgets读取一行文本

fgets函数用于从文件中读取一行文本。函数原型如下:

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

参数说明:
(1) str:用于存储读取到的字符串。
(2) n:指定读取的最大字符数。
(3) stream:文件指针。

示例代码:

FILE *file = fopen("example.txt", "r");
if (file != NULL) {
    char buffer;
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
      printf("%s", buffer);
    }
    fclose(file);
}

1.2.3 使用fread读取二进制数据

fread函数用于从文件中读取指定数量的二进制数据。函数原型如下:

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

参数说明:
(1) ptr:用于存储读取到的数据。
(2) size:每个数据项的大小。
(3) nmemb:要读取的数据项数量。
(4) stream:文件指针。

示例代码:

FILE *file = fopen("example.bin", "rb");
if (file != NULL) {
    char buffer;
    size_t bytesRead = fread(buffer, 1, sizeof(buffer), file);
    printf("读取了 %zu 字节\n", bytesRead);
    fclose(file);
}

1.3 文件的写入操作

C语言也提供了多种文件写入方式,常用的包括fputc、fputs和fwrite函数。

1.3.1 使用fputc写入单个字符

fputc函数用于向文件中写入一个字符。函数原型如下:

int fputc(int c, FILE *stream);

示例代码:

FILE *file = fopen("example.txt", "w");
if (file != NULL) {
    fputc('A', file);
    fclose(file);
}

1.3.2 使用fputs写入字符串

fputs函数用于向文件中写入一个字符串。函数原型如下:

int fputs(const char *str, FILE *stream);

示例代码:

FILE *file = fopen("example.txt", "w");
if (file != NULL) {
    fputs("Hello, World!", file);
    fclose(file);
}

1.3.3 使用fwrite写入二进制数据

fwrite函数用于向文件中写入指定数量的二进制数据。函数原型如下:

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

示例代码:

FILE *file = fopen("example.bin", "wb");
if (file != NULL) {
    char data[] = {1, 2, 3, 4, 5};
    fwrite(data, sizeof(char), sizeof(data), file);
    fclose(file);
}

1.4 文件操作的错误处理

在文件操作过程中,错误处理是非常重要的。C语言提供了多个函数来检测和处理文件操作中的错误。

1.4.1 检查文件指针

在打开文件时,应始终检查文件指针是否为NULL,以确保文件成功打开。

1.4.2 使用ferror检测错误

ferror函数用于检查文件流是否发生错误。函数原型如下:

int ferror(FILE *stream);

示例代码:

if (ferror(file)) {
    printf("文件读取错误\n");
}

1.4.3 使用feof检测文件结束

feof函数用于检查文件流是否到达文件末尾。函数原型如下:

int feof(FILE *stream);

示例代码:

if (feof(file)) {
    printf("文件已读完\n");
}

2. 结论

通过本文的介绍,我们了解了C语言中文件操作的基本方法,包括文件的打开与关闭、读取与写入以及错误处理等。掌握这些基础知识,对于进行更复杂的文件操作和数据处理至关重要。在实际编程中,合理的文件操作和错误处理能够显著提高程序的稳定性和可靠性。希望这篇文章能对你理解和使用C语言文件操作有所帮助。





/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & Linux ...

~互撩~ TG: @Shaw_0xyz
页: [1]
查看完整版本: C语言 - 文件操作