C语言中的文件和文件操作:基础、进阶与实战

目录

一,文件操作基础

1,文件指针:

2,文件打开:

3,文件关闭:

4,文件读写:

二,文件操作进阶

三,文件操作实践

四,其他的高级技巧

1,文件错误处理:

2,文件指针的定位:

3,文件读写模式:

4,二进制文件读写:


一,文件操作基础

在C语言中,文件是一个非常重要的概念,它用于存储程序运行时需要的数据或结果。C语言提供了丰富的文件操作函数,包括打开文件、读取文件、写入文件、关闭文件等。下面我们先来了解一下文件操作的基础知识。

1,文件指针

在C语言中,通过使用文件指针来进行文件操作。文件指针是一个特殊的变量,用于指向打开的文件。

2,文件打开

使用fopen函数来打开一个文件。例如:

FILE *fp = fopen("file.txt", "r"); // "r"表示只读模式打开文件
3,文件关闭

使用fclose函数来关闭一个文件。例如:

fclose(fp); // 关闭文件fp
4,文件读写:

->fgetc:从文件中读取一个字符。

->fgets:从文件中读取一行。

->fputc:将一个字符写入文件中。

->fputs:将一个字符串写入文件中。

例如:

​
char c = fgetc(fp); // 从文件中读取一个字符  
char buffer[100];  
fgets(buffer, 100, fp); // 从文件中读取一行,最多读取99个字符(最后一个字符为'\0')  
fputc('a', fp); // 将字符'a'写入文件中  
fputs("Hello, World!", fp); // 将字符串"Hello, World!"写入文件中  

​

二,文件操作进阶

掌握了文件操作的基础知识后,我们进一步学习一些更高级的文件操作技巧。

1, **fseek**:用于改变文件指针的位置。例如:

fseek(fp, 10, SEEK_SET);// 将文件指针移动到从文件开头开始的第10个字节的位置。  

2,**ftell**:返回当前文件指针的位置。例如:

long pos = ftell(fp);// 获取当前文件指针的位置。

3,**rewind**:将文件指针移到文件的开头。例如:

rewind(fp);//将文件指针移到文件的开头。

4,**fprintf** **fscanf**:这两个函数允许我们使用格式化的方式来读写文件。例如:

fprintf(fp, "Hello, %s!", "World"); // 将"Hello, World!"写入文件中  

char name[50];  

fscanf(fp, "Hello, %s!", name); // 从文件中读取"Hello, World!"并将World存储在name中  

三,文件操作实践

下面我们通过一个具体的实例来展示如何使用C语言进行文件操作。这个实例将演示如何从一个文件中读取数据,并将数据写入另一个文件。假设我们有一个名为`input.txt`的文件,内容如下:

我们的任务是从这个文件中读取数据,并将数据按照新的格式写入另一个文件,即每个记录按照姓、名、年龄、性别这种格式写入新文件‘output.txt’

Alice, 23, Female  
Bob, 30, Male  
Charlie, 45, Male
#include <stdio.h>
#include <string.h> // 使用strtok函数需要包含此头文件
#define MAX_NAME_LEN 50 // 定义名字的最大长度,这里设为50个字符
#define MAX_LINE_LEN 100 // 定义每行最大长度,这里设为100个字符(包括'\0')
int main() {
FILE *input_file = fopen("input.txt", "r"); // 打开输入文件,只读模式
FILE *output_file = fopen("output.txt", "w"); // 打开输出文件,写入模式(如果该文件不存在,会自动创建)
char line[MAX_LINE_LEN]; // 用于存储从输入文件中读取的每一行数据(包括'\0')
char *token; // 用于存储每一行中的各个字段(逗号分隔)
char name[MAX_NAME_LEN]; // 用于存储名字(姓和名)及其姓和名之前的空格(如果有的话)及其性别和年龄及其逗号(如果有的话)
while (fgets(line, MAX_LINE_LEN, input_file)) { // 从输入文件读取每一行数据  
    token = strtok(line, ", "); // 使用逗号和空格作为分隔符,将行分解为各个字段  
    strcpy(name, token); // 第一个字段是姓和名,复制到name中  
    // 接下来处理年龄和性别  
    int age = atoi(strtok(NULL, ", ")); // 使用逗号和空格作为分隔符,获取年龄  
    char gender[3]; // 性别字段的长度最多为2(例如,"Male"或"Female"),加上结束符'\0',总共3个字符  
    strcpy(gender, strtok(NULL, ", ")); // 获取性别,复制到gender中  
    // 将处理后的数据写入输出文件  
    fprintf(output_file, "%s %d %s\n", name, age, gender); // 格式为:姓 名 年龄 性别  
}  
fclose(input_file); // 关闭输入文件  
fclose(output_file); // 关闭输出文件  
return 0;
}

这段代码首先打开输入文件和输出文件。然后,它逐行读取输入文件中的数据,使用strtok函数将每行数据分解为各个字段(姓、名、年龄、性别)。接着,它将处理后的数据(姓、名、年龄、性别)按照新的格式写入输出文件。最后,关闭输入文件和输出文件。

四,其他的高级技巧

1,文件错误处理:

C语言提供了错误处理机制,当文件操作出现错误时,可以通过检查返回值或使用errno变量来获取错误信息。例如,fopen函数在打开文件失败时会返回NULL,我们可以通过检查这个返回值来发现错误。

FILE *fp = fopen("nonexistent.txt", "r");  
if (fp == NULL) {  
    perror("Error opening file");  
    return 1;  
}
2,文件指针的定位

使用fseekftell函数可以移动文件指针的位置。例如,你可以使用fseek(fp, 0, SEEK_END)将文件指针移动到文件的末尾,然后使用ftell(fp)获取文件的长度。

FILE *fp = fopen("file.txt", "r");  
fseek(fp, 0, SEEK_END);  
long length = ftell(fp);  
printf("File length: %ld\n", length);
3,文件读写模式

C语言提供了多种文件读写模式,如只读模式、只写模式、追加模式等。每种模式都有其特定的用途,选择合适的模式可以提高文件读写的效率。

4,二进制文件读写

对于二进制文件,C语言提供了freadfwrite函数进行读写操作。这些函数一次可以读写多个字节,适用于处理图像、音频等二进制数据。

这些是C语言中关于文件操作的一些高级技巧,掌握这些技巧可以帮助你更好地处理文件操作任务。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安大小万

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

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

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

打赏作者

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

抵扣说明:

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

余额充值