在 C 语言中,文件输入输出是通过标准库提供的一组函数来完成的。这些函数提供了打开、关闭、读取、写入文件等功能。以下是文件输入输出的重点总结:
1. 文件指针
C 语言使用文件指针 FILE*
来处理文件。文件指针是由标准库定义的类型,用于表示文件。
2. 打开文件
使用 fopen
函数打开文件。fopen
返回一个文件指针,如果打开失败,则返回 NULL
。
FILE* fopen(const char* filename, const char* mode);
filename
:要打开的文件名。mode
:文件打开模式,如 “r”(读取),“w”(写入),“a”(追加)等。
示例:
FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
perror("Error opening file");
return -1;
}
3. 关闭文件
使用 fclose
函数关闭文件。成功关闭返回 0,失败返回 EOF。
int fclose(FILE *stream);
示例:
fclose(fp);
4. 读取文件
使用 fscanf
、fgets
或 fread
函数从文件中读取数据。
fscanf
类似于 scanf
,但从文件读取数据。
int fscanf(FILE *stream, const char *format, ...);
示例:
int num;
fscanf(fp, "%d", &num);
fgets
从文件读取一行。
char* fgets(char *str, int n, FILE *stream);
示例:
char buffer[100];
fgets(buffer, 100, fp);
fread
从文件中读取块数据。
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
示例:
int data[100];
fread(data, sizeof(int), 100, fp);
5. 写入文件
使用 fprintf
、fputs
或 fwrite
函数向文件中写入数据。
fprintf
类似于 printf
,但向文件写入数据。
int fprintf(FILE *stream, const char *format, ...);
示例:
int num = 42;
fprintf(fp, "%d\n", num);
fputs
向文件写入字符串。
int fputs(const char *str, FILE *stream);
示例:
fputs("Hello, world!\n", fp);
fwrite
向文件写入块数据。
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
示例:
int data[100] = {1, 2, 3, 4, 5};
fwrite(data, sizeof(int), 100, fp);
6. 文件定位
使用 fseek
和 ftell
函数在文件中定位。
fseek
移动文件指针到指定位置。
int fseek(FILE *stream, long int offset, int whence);
offset
:偏移量。whence
:起始位置(SEEK_SET
、SEEK_CUR
、SEEK_END
)。
示例:
fseek(fp, 0, SEEK_SET); // 移动到文件开始位置
ftell
返回文件指针当前位置。
long int ftell(FILE *stream);
示例:
long pos = ftell(fp);
7. 错误处理
使用 ferror
、feof
、perror
和 clearerr
函数处理文件操作中的错误。
ferror
检查文件操作是否发生错误。
int ferror(FILE *stream);
feof
检查是否到达文件末尾。
int feof(FILE *stream);
perror
打印错误信息。
void perror(const char *s);
clearerr
清除文件指针的错误标志和文件结束标志。
void clearerr(FILE *stream);
小结
文件输入输出是 C 语言中的一个重要组成部分,通过 fopen
、fclose
、fscanf
、fprintf
、fseek
、ftell
等函数,可以实现文件的打开、关闭、读取、写入和定位等操作。正确的错误处理和文件关闭是确保文件操作正确性和资源释放的重要环节。