📜  C文件处理(1)

📅  最后修改于: 2023-12-03 15:30:15.134000             🧑  作者: Mango

C文件处理

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语言中对文件的基本处理操作。我们可以通过这些操作实现各种文件处理任务。