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

Cannot read from file - ferror() returns 1

本文关键字:ferror 返回 读取 文件      更新时间:2023-10-16

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

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

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

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

ferror(( 返回代码错误,因此在此处检查了错误("不允许操作"(。

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

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

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"
}
}
}
}

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

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