无法从文件中读取 - ferror() 返回 1
Cannot read from file - ferror() returns 1
首先,我的代码昨天还在工作。
我有一个代码来打开和读取 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 的总和。
结论:文件函数返回的错误并不总是与文件有关。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 从python中调用C++函数并获取返回值
- 矩阵向量乘法(cublasDgemv)返回零
- 无法从文件中读取 - ferror() 返回 1