C语言文件操作函数详解
C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:
文件的打开
fopen():打开文件
文件的关闭
fclose():关闭文件
文件的读写
fgetc():读取一个字符
fputc():写入一个字符
fgets():读取一个字符串
fputs():写入一个字符串
fprintf():写入格式化数据
fscanf():格式化读取数据
fread():读取数据
fwrite():写入数据
文件状态检查
feof():文件是否结束
ferror():文件读/写是否出错
clearerr():清除文件错误标志
ftell():文件指针的当前位置
文件指针定位
rewind():把文件指针移到开始处
fseek():重定位文件指针
参数解释:
“r”:以只读的形式打开文本文件(不存在则出错)
“w”:以只写的形式打开文本文件(若不存在则新建,反之,则从文件起始位置写,覆盖原内容)
“a”:以追加的形式打开文本文件(若不存在,则新建;反之,在原文件后追加)
“r+”:以读写的形式打开文本文件(读时,从头开始;
### 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", 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);
}
```
- **检查错误**:
```c
FILE *fp;
fp = fopen("test.txt", "r");
if (fp != NULL) {
while (ferror(fp)) {
// 错误处理
}
fclose(fp);
}
```
- **清除错误**:
```c
FILE *fp;
fp = fopen("test.txt", "r");
if (fp != NULL) {
clearerr(fp);
fclose(fp);
}
```
- **获取文件指针位置**:
```c
FILE *fp;
long pos;
fp = fopen("test.txt", "r");
if (fp != NULL) {
pos = ftell(fp);
printf("Current position: %ld\n", pos);
fclose(fp);
}
```
##### 5. 文件指针定位
- **`rewind()`**:将文件指针移动到文件开头。
- **`fseek()`**:将文件指针移动到指定位置。
**示例**:
- **移动到文件开头**:
```c
FILE *fp;
fp = fopen("test.txt", "r+");
if (fp != NULL) {
rewind(fp);
// 重新读取
fclose(fp);
}
```
- **移动到指定位置**:
```c
FILE *fp;
fp = fopen("test.txt", "r+");
if (fp != NULL) {
fseek(fp, 10L, SEEK_SET);
// 从位置10开始读取
fclose(fp);
}
```
#### 四、总结
本文详细介绍了C语言中的文件操作函数,包括文件的打开、关闭、读写、状态检查以及指针定位等关键操作。通过学习这些函数,你可以更好地理解和掌握如何在C语言中有效地处理文件操作。每个函数都有其特定的应用场景,合理地选择和使用这些函数能够提高程序的效率和可靠性。希望本文对你有所帮助!