"fopen" 抛出异常

Expection thrown on "fopen"

我写了一个函数来读回一个二进制文件。进行调试时,它在行 "pFile=fopen(filename, "rb");" 上显示 "exception Thrown"。我不知道为什么。 另外,如何在函数"read_back(const char*filename)"

中return读回缓冲区
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;
}

您的代码中存在几个问题。

首先,数组索引以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() 并读取到文件末尾。