C 语言文件读写操作详解
目录
C 语言文件读写操作详解
引言
C 语言提供了丰富的文件操作函数,使得读取和写入文件变得非常方便。本文将详细介绍 C 语言中常用的文件读写操作,包括文件打开、关闭、读取和写入等基本操作,并提供具体的示例代码。
1. 文件操作基本概念
在 C 语言中,文件操作主要通过 FILE
类型的指针来实现。FILE
是一个结构体类型,定义在 <stdio.h>
头文件中。文件操作的基本流程通常包括以下几个步骤:
- 打开文件
- 读取或写入文件
- 关闭文件
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. 二进制文件读写
使用 fread
和 fwrite
函数读写二进制文件。fread
和 fwrite
函数的原型如下:
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)!