📅  最后修改于: 2023-12-03 15:30:15.134000             🧑  作者: Mango
C语言作为一种系统编程语言,对处理文件(包括读、写、复制等)有着很强的支持。在本文中我们将介绍C语言中处理文件的一些基本操作。
我们可以使用fopen()
函数打开文件,函数定义如下:
FILE *fopen(const char *filename, const char *mode);
其中,filename
表示文件名,mode
表示打开文件的模式。mode
的取值如下表:
|值|含义| |:-:|:-:| |"r"|读取,文件必须存在| |"w"|写入,如果文件已存在则先清空文件内容| |"a"|追加,写入数据时始终将数据追加到文件尾部|
函数返回值为一个指向FILE
类型的指针,该指针同时也是一个文件流,用于后续的文件读写操作。
markdown 代码片段:
## 打开文件
我们可以使用`fopen()`函数打开文件,函数定义如下:
FILE *fopen(const char *filename, const char *mode);
其中,`filename`表示文件名,`mode`表示打开文件的模式。`mode`的取值如下表:
|值|含义|
|:-:|:-:|
|"r"|读取,文件必须存在|
|"w"|写入,如果文件已存在则先清空文件内容|
|"a"|追加,写入数据时始终将数据追加到文件尾部|
函数返回值为一个指向`FILE`类型的指针,该指针同时也是一个文件流,用于后续的文件读写操作。
打开文件后,我们需要在使用完之后关闭文件。我们可以使用fclose()
函数关闭文件,函数定义如下:
int fclose(FILE *stream);
其中,stream
为指向文件的指针,函数返回值为0表示成功关闭文件,否则表示关闭失败。
markdown 代码片段:
## 关闭文件
打开文件后,我们需要在使用完之后关闭文件。我们可以使用`fclose()`函数关闭文件,函数定义如下:
int fclose(FILE *stream);
其中,`stream`为指向文件的指针,函数返回值为0表示成功关闭文件,否则表示关闭失败。
我们可以使用fread()
函数读取文件,函数定义如下:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
其中,ptr
为读取数据的缓冲区首地址,size
为每个数据块的字节数,count
为读取数据块个数,stream
为指向文件的指针,函数返回值为实际读取到的数据块个数。
markdown 代码片段:
## 读取文件
我们可以使用`fread()`函数读取文件,函数定义如下:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
其中,`ptr`为读取数据的缓冲区首地址,`size`为每个数据块的字节数,`count`为读取数据块个数,`stream`为指向文件的指针,函数返回值为实际读取到的数据块个数。
我们可以使用fwrite()
函数写入文件,函数定义如下:
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
其中,ptr
为写入数据的缓冲区首地址,size
为每个数据块的字节数,count
为写入数据块个数,stream
为指向文件的指针,函数返回值为实际写入的数据块个数。
markdown 代码片段:
## 写入文件
我们可以使用`fwrite()`函数写入文件,函数定义如下:
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
其中,`ptr`为写入数据的缓冲区首地址,`size`为每个数据块的字节数,`count`为写入数据块个数,`stream`为指向文件的指针,函数返回值为实际写入的数据块个数。
为了演示文件处理的完整流程,我们可以编写一个复制文件的函数。
void copy_file(const char *src_path, const char *dst_path) {
FILE *src_file = fopen(src_path, "rb");
FILE *dst_file = fopen(dst_path, "wb");
if (src_file == NULL || dst_file == NULL) {
printf("Failed to open file\n");
return;
}
char buf[1024];
size_t read_size, write_size;
while ((read_size = fread(buf, 1, sizeof(buf), src_file)) > 0) {
write_size = fwrite(buf, 1, read_size, dst_file);
if (write_size < read_size) {
printf("Failed to write file\n");
return;
}
}
fclose(src_file);
fclose(dst_file);
}
markdown 代码片段:
## 复制文件
为了演示文件处理的完整流程,我们可以编写一个复制文件的函数。
```c
void copy_file(const char *src_path, const char *dst_path) {
FILE *src_file = fopen(src_path, "rb");
FILE *dst_file = fopen(dst_path, "wb");
if (src_file == NULL || dst_file == NULL) {
printf("Failed to open file\n");
return;
}
char buf[1024];
size_t read_size, write_size;
while ((read_size = fread(buf, 1, sizeof(buf), src_file)) > 0) {
write_size = fwrite(buf, 1, read_size, dst_file);
if (write_size < read_size) {
printf("Failed to write file\n");
return;
}
}
fclose(src_file);
fclose(dst_file);
}
以上就是C语言中对文件的基本处理操作。我们可以通过这些操作实现各种文件处理任务。