c_cpp ç一次将整个文件读入内存的.c

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp ç一次将整个文件读入内存的.c相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>

//调用后记得释放掉返回值指向的内存
char * read_to_memcry(char * filename )
{
    FILE * pFile = NULL;
    long lSize = 0;
    char * buffer = NULL;
    long result = 0;

    /* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */
    pFile = fopen(filename, "rb" );
    if (pFile==NULL)
    {
        printf("Open file:%s error!\n",filename);
//        return -1;
        return NULL;
    }

    /* 获取文件大小 */
    fseek(pFile , 0 , SEEK_END);
    lSize = ftell(pFile);
    rewind(pFile);//将文件内部的位置指针重新指向一个流(数据流/文件)的开头

    /* 分配内存存储整个文件 */
    buffer = (char *)malloc(sizeof(char)*lSize);
    if(buffer == NULL)
    {
        fputs("Memory error",stderr);
//        return -2;
        return NULL;
    }

    int read_length = 0;
    /* 将文件拷贝到buffer中 */
    do
    {
        result = fread(buffer + read_length,1,lSize,pFile);
        if(result < 0)
        {
            printf("Read file:%s error!", filename);
//            return -3;
            return NULL;
        }
        read_length += result;
    }while(result);


    if(read_length != lSize)
    {
        fputs("Reading error",stderr);
//        return -3;
        return NULL;
    }
    /* 现在整个文件已经在buffer中,可由标准输出打印内容 */
    printf("%s", buffer);

    /* 结束演示,关闭文件并释放内存 */
    fclose(pFile);
    
//    free(buffer);
//    return 0;
    return NULL;
}

以上是关于c_cpp ç一次将整个文件读入内存的.c的主要内容,如果未能解决你的问题,请参考以下文章

在 python openCV 中一次将许多图像读入内存

AVAudioPlayer 是从磁盘流式传输文件,还是一次将其全部加载到内存中?

c_cpp C ++:将整个文件读入字符串。

每日灵魂一问-对Node 中的 Stream 的理解?应用场景?

如何在 Julia 中逐行读取文件?

如何在 C++ 中将整个文件读入 std::string?