基于C语言实现文件读取

1 C语言实现文件读取

/**
 * @brief 读取文件
 *
 * @param file_path 文件及其路径名
 * @param read_buff 读取buff指针
 * @param buff_len buff长度
 * @return int 0:读取成功 -1:打开文件失败 -2:文件大小超出buff允许大小 -3:读取文件失败
 */
int read_file(char *file_path, u8 *read_buff, u32 buff_len)
{
    FILE *file;
    long file_size;

    file = fopen(file_path, "rb+"); // 以只读方式(注意:必须是2进制方式,否则读取有误)打开文件
    if (file == NULL)
    {
        printf("open file %s fail.\r\n", file_path);
        return -1;
    }

    fseek(file, 0, SEEK_END); // 将文件指针移动到文件末尾处
    file_size = ftell(file);  // 获取文件大小
    if (file_size > (buff_len - 1))
    {
        printf("file size %d Byte > buff_len - 1(%d Byte).\r\n", file_size, buff_len - 1);
        fclose(file);
        return -2;
    }

    fseek(file, 0, SEEK_SET);                              // 将文件指针移动到文件开始处
    if (fread(read_buff, 1, file_size, file) != file_size) // 读取文件
    {
        printf("read file fail.\r\n");
        fclose(file);
        return -3;
    }
    read_buff[file_size] = 0x0; // 末尾添0
    fclose(file);

    return 0;
}

2 功能测试

新建1个名为file.txt的文本文件,里面随机写入一些数字及英文:
基于C语言实现文件读取_第1张图片
测试代码如下:

int main(void)
{
    u8 read_buff[10240];
    read_file("file.txt", read_buff, sizeof(read_buff));
    printf("%s", read_buff);
    return 0;
}

读取file.txt文件内容到read_buff数组,然后将read_buff数组内容以字符串形式打印出来。
将打印结果复制粘贴到另一个文本文件,使用比较工具比较2个文件内容是否一致:
基于C语言实现文件读取_第2张图片
可以看到,2个文件内容一致,说明读取文件函数read_file功能正常。

你可能感兴趣的:(C语言,c语言,文件读取)