首先,我的代码昨天工作了。
我有一个打开和读取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"
}
}
}
}
答案 0 :(得分:-1)
错误“不允许操作”与文件或函数无关,而与缓冲区有关。 我有2个缓冲区,我将一个大小除以2,但是在函数中,我传递了2的和。
结论:文件功能返回的错误并不总是与文件有关。