C语言中的文件操作
在C语言中,文件操作是通过一系列标准库函数来实现的,这些函数允许程序打开文件、读写文件内容以及关闭文件。下面将详细介绍这些操作的相关API。
1. 文件打开 - fopen()
fopen() 函数用于打开文件,并返回一个指向 FILE 类型的指针,该指针用于后续的文件操作。如果文件打开失败,则返回 NULL。
#include <stdio.h> |
|
FILE *fopen(const char *filename, const char *mode); |
filename 是要打开文件的名称(包括路径)。
mode 是打开文件的模式,如 "r"(只读)、"w"(只写,文件不存在则创建,存在则覆盖)、"a"(追加,文件不存在则创建)、"r+"(读写,文件必须存在)等。
2. 文件读写
文件读写操作有很多函数,这里介绍最常用的几个。
读取操作
fscanf(): 从文件读取格式化输入。
fgets(): 从文件读取一行。
fread(): 从文件读取数据块。
写入操作
fprintf(): 向文件写入格式化输出。
fputs(): 向文件写入一个字符串。
fwrite(): 向文件写入数据块。
3. 文件定位 - fseek(), ftell(), rewind()
fseek(): 移动文件内部的位置指针。
ftell(): 返回当前位置指针相对于文件开头的偏移量。
rewind(): 将文件内部的位置指针重置回文件的开头。
4. 文件关闭 - fclose()
fclose() 函数用于关闭一个打开的文件。关闭文件是一个好习惯,可以释放文件相关的资源,并确保所有的输出都被正确写入文件。
#include <stdio.h> |
|
int fclose(FILE *stream); |
stream 是指向 FILE 对象的指针,该对象标识了要关闭的文件。
如果关闭成功,则返回 0;如果失败,则返回 EOF。
示例代码
下面是一个简单的示例,演示如何使用 fopen(), fprintf(), 和 fclose() 来写入文件:
#include <stdio.h> |
|
int main() { |
FILE *fp = fopen("example.txt", "w"); // 打开文件用于写入 |
if (fp == NULL) { |
perror("Error opening file"); |
return -1; |
} |
|
fprintf(fp, "Hello, World!\n"); // 写入字符串到文件 |
|
fclose(fp); // 关闭文件 |
|
return 0; |
} |
这个例子创建(或覆盖)了一个名为 example.txt 的文件,并向其中写入了 "Hello, World!\n"。然后,它关闭了文件以释放资源。
在C语言中,文件操作是一个核心而基础的功能,它允许程序与存储在硬盘上的数据进行交互。通过一系列标准库函数,C语言提供了打开文件、读写文件内容以及关闭文件的能力。这些操作对于数据处理、日志记录、配置文件读写等场景至关重要。以下将详细介绍C语言中的文件操作,并通过代码示例来展示如何使用这些函数。
1. 文件打开 - fopen()
fopen() 函数用于打开文件,并返回一个指向 FILE 类型的指针,该指针用于后续的文件操作。如果文件打开失败,则返回 NULL。
函数原型如下:
#include <stdio.h> |
FILE *fopen(const char *filename, const char *mode); |
filename 是要打开文件的名称(包括路径)。
mode 是打开文件的模式,如 "r"(只读)、"w"(只写,文件不存在则创建,存在则覆盖)、"a"(追加,文件不存在则创建)、"r+"(读写,文件必须存在)等。
示例代码:
#include <stdio.h> |
|
int main() { |
FILE *fp = fopen("example.txt", "w"); // 打开文件用于写入 |
if (fp == NULL) { |
perror("Error opening file"); |
return -1; |
} |
|
// 后续文件操作... |
|
fclose(fp); // 完成后关闭文件 |
return 0; |
} |
2. 文件写入
文件写入操作有多种函数可用,这里介绍最常用的 fprintf() 和 fwrite()。
fprintf():向文件写入格式化输出,类似于 printf() 但输出到文件。
示例代码:
#include <stdio.h> |
|
int main() { |
FILE *fp = fopen("example.txt", "w"); |
if (fp == NULL) { |
perror("Error opening file"); |
return -1; |
} |
|
fprintf(fp, "Hello, World!\n"); // 写入字符串 |
fprintf(fp, "Number: %d\n", 123); // 写入格式化数据 |
|
fclose(fp); |
return 0; |
} |
fwrite():向文件写入数据块,常用于二进制文件或大量数据的写入。
示例代码:
#include <stdio.h> |
#include <stdlib.h> |
|
int main() { |
FILE *fp = fopen("data.bin", "wb"); // 打开文件用于二进制写入 |
if (fp == NULL) { |
perror("Error opening file"); |
return -1; |
} |
|
int numbers[] = {1, 2, 3, 4, 5}; |
size_t written = fwrite(numbers, sizeof(int), 5, fp); // 写入5个整数 |
|
if (written != 5) { |
fprintf(stderr, "Error writing to file\n"); |
} |
|
fclose(fp); |
return 0; |
} |
3. 文件读取
文件读取操作同样有多种函数,这里介绍 fscanf(), fgets(), 和 fread()。
fscanf():从文件读取格式化输入,类似于 scanf() 但从文件读取。
fgets():从文件读取一行,直到遇到换行符或文件结束符。
fread():从文件读取数据块,常用于二进制文件或大量数据的读取。
示例代码(使用 fgets()):
#include <stdio.h> |
#include <stdlib.h> |
|
int main() { |
FILE *fp = fopen("example.txt", "r"); |
if (fp == NULL) { |
perror("Error opening file"); |
return -1; |
} |
|
char buffer[100]; |
while (fgets(buffer, sizeof(buffer), fp) != NULL) { |
printf("%s", buffer); |
} |
|
fclose(fp); |
return 0; |
} |
4. 文件定位
文件定位是指移动文件内部的位置指针,以便从文件的特定位置开始读写数据。fseek(), ftell(), 和 rewind() 是用于文件定位的函数。
fseek():移动文件内部的位置指针。
ftell():返回当前位置指针相对于文件开头的偏移量。