我不赞成这一点。
文件存在。它有长度适合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);
/*...*/
}
我有什么想法吗?
答案 0 :(得分:2)
首先,标准库不需要有意义地支持从SEEK_END
寻求。你检查了sizeIndexI
的价值了吗?也许它只是零?如果您要求fread
读取零元素,则预期会返回零。
其次,您将文本流打开。对于ftell
返回的文本流,通常没有任何有意义的数字语义。通常情况下,文本流的ftell
返回当前位置的实现定义编码,而不是文件开头的字节偏移量。如果您希望将流作为二进制流处理,请将“b”添加到fopen
fpNewsPageLogger = fopen ("/NewsLogx", "ab+");