C语言文件操作全解析:从基础到实践
立即解锁
发布时间: 2025-08-25 02:17:43 阅读量: 1 订阅数: 4 

# C语言文件操作全解析:从基础到实践
## 1. 文件路径表示
在C语言中,准确表示文件路径至关重要。以下是不同路径表示的含义:
- `./myFile.text`:表示当前目录下的`myFile.text`文件。虽然`"myFile.text"`也能表示当前目录下的该文件,但使用`"./myFile.text"`意图更清晰。
- `/myFile.text`:指硬盘根目录下的`myFile.text`文件。
- `../myFile.text`:两个点`..`表示父目录,所以此路径指当前目录的父目录下的`myFile.text`文件。例如,程序`/Users/davemark/test/myProgram`中,`"./myFile.text"`实际指`/Users/davemark/test/myFile.text`,而`"../myFile.text"`指`/Users/davemark/myFile.text`。
- `~/myFile.text`:表示用户主目录下的`myFile.text`文件,在Mac系统中,可能是`/Users/davemark/myFile.text`。
## 2. 打开和关闭文件
### 2.1 fopen()函数
`fopen()`函数用于打开文件,其原型如下:
```c
FILE *fopen( const char *name, const char *mode );
```
- `const`关键字使变量或参数为只读,即`fopen()`不能修改`name`和`mode`所指向的字符数组。
- `name`参数指定要打开的文件。
- `mode`参数告知`fopen()`如何访问文件,基本的文件模式有:
- `"r"`:只读模式,文件必须已存在,不能用此模式创建文件。
- `"w"`:写入模式,如果文件不存在则创建新文件;若文件已存在,则删除原文件并创建新的空文件。使用时需格外小心,因为会删除原文件内容。
- `"a"`:追加模式,若文件不存在则创建;若存在,写入的数据会追加到文件末尾。
示例代码:
```c
FILE *fp;
if ( (fp = fopen( "My Data File", "r")) == NULL ) {
printf( "File doesn't exist!!!\n" );
exit(1);
}
```
### 2.2 同时打开文件数量限制
同时打开文件的数量有限制,由`<stdio.h>`中的`FOPEN_MAX`定义,当前该值为20。
### 2.3 fclose()函数
`fclose()`函数用于关闭文件,原型为:
```c
int fclose( FILE *stream );
```
若文件成功关闭,`fclose()`会释放`FILE`结构体占用的内存并返回0。必须确保每个`fopen()`调用都有对应的`fclose()`调用,否则会造成内存中存在不必要的`FILE`结构体。若`fclose()`失败,返回`EOF`(文件结束符)。
## 3. 读取文件
### 3.1 fgetc()函数
`fgetc()`用于从文件输入缓冲区读取单个字符,原型如下:
```c
int fgetc( FILE *fp );
```
参数`fp`是`fopen()`返回的`FILE`指针。若文件指针已到文件末尾,`fgetc()`返回`EOF`。虽然`fgetc()`返回`int`类型,但可以用`char`类型变量接收,因为C编译器会自动进行类型转换。
### 3.2 fgets()函数
`fgets()`用于将一系列字符读入字符数组,原型为:
```c
char *fgets( char *s, int n, FILE *fp );
```
示例代码:
```c
#define kMaxBufferSize 200
FILE *fp;
char buffer[ kMaxBufferSize ];
if ( (fp = fopen( "My Data File", "r")) == NULL ) {
printf( "File doesn't exist!!!\n" );
exit(1);
}
if ( fgets( buffer, kMaxBufferSize, fp ) == NULL ) {
if ( feof( fp ) )
printf( "End-of- file!!!\n" );
else
printf( "Unknown error!!!\n" );
}
else
printf( "File contents: %s\n", buffer );
```
当`fgets()`返回`NULL`时,可调用`feof()`函数判断是否到达文件末尾。
### 3.3 fscanf()函数
`fscanf()`类似于`scanf()`,但从文件读取数据,原型如下:
```c
int fscanf( FILE *fp, const char* format, ... );
```
建议优先使用`fgets()`,因为它可以指定最大读取字符数,防止缓冲区溢出,而`f
0
0
复制全文
相关推荐









