期望投向“ fopen”

时间:2019-01-21 14:33:28

标签: c++ fopen

我写了一个函数来读回二进制文件。进行调试时,它在“ pFile = fopen(filename,“ rb”);“行上显示“抛出异常”。我不知道为什么 另外,如何在函数“ read_back(const char * filename)”中返回回读缓冲区

void read_back(const char *filename)
{
    FILE* pFile;
    long lSize=100;
    char* buffer;
    buffer = (char*)malloc(sizeof(char)*lSize);
    pFile = fopen(filename, "rb");
    if (pFile == NULL) { fputs("File error", stderr); exit(1); }

    // copy the file into the buffer:
    size_t result = fread(buffer, 1, lSize, pFile);
    if (result != lSize) { fputs("Reading error", stderr); exit(3); }
       fclose(pFile);   
}

int main() 
{
    const char *fname[2];
    fname[1] = "C:\\1_data.bin";
    fname[2] = "C:\\2_data.bin";
    fname[3] = "C:\\3_data.bin";

    for (int i = 0; i < 2; ++i) 
    {
        read_back(fname[i]);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您的代码中有几个问题。

首先,数组索引以0开头。 fname2 char *的数组,您错过了初始化fname[0]的过程。此外,您正在初始化数组末尾的数组-fname[2]fname[3]。由于您的程序假设要读取三个文件,因此您应该执行以下操作:

    const char *fname[3];
    fname[0] = "C:\\1_data.bin";
    fname[1] = "C:\\2_data.bin";
    fname[2] = "C:\\3_data.bin";

将循环条件更改为i < 3

read_back()中,您将lSize设置为100,并在下面的代码中设置

if (result != lSize) { fputs("Reading error", stderr); exit(3); }

这意味着,要读取的文件应具有字节数,可以由fread()读取,100或更多,否则为Reading error。另外,如果文件具有多于100个字节,则除前100个字节外,它将不被读取。可能您应该循环调用fread()并阅读直到文件末尾。