为什么fread()返回0?

时间:2014-02-05 21:54:04

标签: c fread

我不赞成这一点。 文件存在。它有长度适合sizeIndexI所持有的值。 我在文件的开头(我不是吗?),无论如何它都不会从那个文件中读取...

OFC。该文件之前也成功打开过。 (在这种情况下使用a+)并且文件的访问权限是ofc。也给了。

fpNewsPageLogger = fopen ("/NewsLogx", "a+");

if (fpNewsPageLogger == nullptr)
{
            /*...*/
}
else
{
        fseek (fpNewsPageLogger, 0 ,SEEK_END);
        sizeIndexI = ftell (fpNewsPageLogger);
        rewind (fpNewsPageLogger);
        DebugLogMsg10 (pDebugLogger, sizeThreadID, "ReadAmount:%d IndexI:%d!", sizeBytesRead, sizeIndexI);

        cpTmpNews = calloc (sizeIndexI, sizeof(char));

        if (cpTmpNews == nullptr)
        {
            fclose (fpNewsPageLogger);
            return;
        }

        sizeBytesRead = fread (cpTmpNews, sizeof (char), sizeIndexI, fpNewsPageLogger);

    /*...*/
}

我有什么想法吗?

1 个答案:

答案 0 :(得分:2)

首先,标准库不需要有意义地支持从SEEK_END寻求。你检查了sizeIndexI的价值了吗?也许它只是零?如果您要求fread读取零元素,则预期会返回零。

其次,您将文本流打开。对于ftell返回的文本流,通常没有任何有意义的数字语义。通常情况下,文本流的ftell返回当前位置的实现定义编码,而不是文件开头的字节偏移量。如果您希望将流作为二进制流处理,请将“b”添加到fopen

fpNewsPageLogger = fopen ("/NewsLogx", "ab+");