本文档深入解析了C语言中的文件操作相关函数,涵盖打开、读取、写入和关闭文件等常用操作方法,并提供了示例代码帮助理解。适合初学者及进阶学习者参考使用。
### C语言文件操作函数详解
#### 一、概述
C语言是一种高级编程语言,它不像某些其他语言(如Python)那样内置了丰富的输入输出指令。相反,C语言依赖于ANSI C提供的标准库函数来进行所有输入输出操作。本段落将详细介绍C语言中的文件操作函数,并通过示例帮助理解这些函数的工作原理。
#### 二、文件操作函数分类
C语言中的文件操作函数大致可以分为以下几类:
1. **文件的打开**:`fopen()`。
2. **文件的关闭**:`fclose()`。
3. **文件的读写**:
- `fgetc()`:读取一个字符。
- `fputc()`:写入一个字符。
- `fgets()`:读取一个字符串。
- `fputs()`:写入一个字符串。
- `fprintf()`:写入格式化数据。
- `fscanf()`:格式化读取数据。
- `fread()`:读取数据。
- `fwrite()`:写入数据。
4. **文件状态检查**:
- `feof()`:文件是否结束。
- `ferror()`:文件读写是否出错。
- `clearerr()`:清除文件错误标志。
- `ftell()`:文件指针的当前位置。
5. **文件指针定位**:
- `rewind()`:把文件指针移到开始处。
- `fseek()`:重定位文件指针。
#### 三、具体函数介绍
##### 1. 文件的打开 - `fopen()`
**函数原型**:
```c
FILE *fopen(const char *filename, const char *mode);
```
**参数**:
- `filename`:文件名或路径。
- `mode`:打开模式。
**返回值**:
- 成功返回指向文件的指针。
- 失败返回 `NULL`。
**示例**:
```c
FILE *fp;
fp = fopen(test.txt, r);
if (fp == NULL) {
perror(Error opening file);
} else {
文件成功打开
}
```
##### 2. 文件的关闭 - `fclose()`
**函数原型**:
```c
int fclose(FILE *stream);
```
**参数**:
- `stream`:文件流。
**返回值**:
- 成功返回 0。
- 失败返回 EOF。
**示例**:
```c
int ret = fclose(fp);
if (ret != 0) {
perror(Error closing file);
} else {
文件成功关闭
}
```
##### 3. 文件的读写
- **`fgetc()`**:读取单个字符。
- **`fputc()`**:写入单个字符。
- **`fgets()`**:读取一行字符串。
- **`fputs()`**:写入一行字符串。
- **`fprintf()`**:写入格式化字符串。
- **`fscanf()`**:格式化读取。
- **`fread()`**:读取数据块。
- **`fwrite()`**:写入数据块。
**示例**:
- **读取字符**:
```c
int ch;
FILE *fp;
fp = fopen(input.txt, r);
if (fp != NULL) {
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
fclose(fp);
}
```
- **写入字符**:
```c
char ch;
FILE *fp;
fp = fopen(output.txt, w);
if (fp != NULL) {
ch = getchar();
while (ch != EOF) {
fputc(ch, fp);
ch = getchar();
}
fclose(fp);
}
```
- **读取字符串**:
```c
char str[100];
FILE *fp;
fp = fopen(input.txt, r);
if (fp != NULL) {
fgets(str, sizeof(str), fp);
printf(%s\n, str);
fclose(fp);
}
```
- **写入字符串**:
```c
char str[] = Hello, World!;
FILE *fp;
fp = fopen(output.txt, w);
if (fp != NULL) {
fputs(str, fp);
fclose(fp);
}
```
##### 4. 文件状态检查
- **`feof()`**:判断是否到达文件末尾。
- **`ferror()`**:判断是否有错误发生。
- **`clearerr()`**:清除错误标志。
- **`ftell()`**:获取当前文件指针的位置。
**示例**:
- **检查文件末尾**:
```c
FILE *fp;
fp = fopen(test.txt, r);
if (fp != NULL) {
while (!feof(fp)) {
读取操作
}
fclose(fp);
}
```
- **检查