无法读取文件-ferror()返回1

时间:2018-08-17 06:26:32

标签: c++

首先,我的代码昨天工作了。

我有一个打开和读取2个文件并写入1的代码。

它使用fopen_s()打开所有文件(“ rb”读取,“ wb”写入),fread()读取,fwrite()写入。我还通过指向末尾然后倒带来计算文件的大小, 我检查了FILE *是否为空以及errno是否不同于0。 问题是,当我从第一个文件读取时,他将返回0,第二个文件将返回4(预期)。

我用ferror()检查了第一个文件,他返回1,feof()返回0。

ferror()返回代码错误,因此检查了错误here(“不允许操作”)。

这不是同一项目中唯一有此问题并且已经尝试使用其他文件的功能。

代码(这是代码的一部分):

FILE * c = NULL;
errno_t error = fopen_s(&c, c_str.c_str(), "rb");
if (c != NULL && error == 0)
{
    FILE * k = NULL;
    error = fopen_s(&k, k_str.c_str(), "rb");
    if (k != NULL && error == 0)
    {
        FILE * f = NULL;
        error = fopen_s(&f, f_str.c_str(), "wb");
        if (f != NULL && error == 0)
        {
            fseek(c, 0L, SEEK_END);
            long size = ftell(c);
            rewind(c);
            size_t read_c = fread(num, sizeof(char), buf_size, c);
            size_t read_k = fread(buf, sizeof(char), buf_size, k);
            if (ferror(c))
            {
                // he enter here returning "1"
            }
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

错误“不允许操作”与文件或函数无关,而与缓冲区有关。 我有2个缓冲区,我将一个大小除以2,但是在函数中,我传递了2的和。

结论:文件功能返回的错误并不总是与文件有关。