为什么在使用fseek()和ftell()之后返回错误的文件大小?

时间:2019-07-01 14:52:40

标签: c++ c file

我正在尝试获取文件的大小。我正在使用fseek转到文件末尾,并使用ftell返回文件大小。但是,将返回的文件大小与文件的实际大小进行比较之后,返回的值会更大。

后来,这导致我读取的字符多于文件中的字符,导致文件内容后跟乱码。

// Open file
FILE* file= fopen(path, "r");

// Retrieve length
fseek(file, 0, SEEK_END);
long length = ftell(file);
rewind(file);

此后,我继续读取文件。

// Create buffer and read file contents
char* source= (char*)malloc(length + 1);
if(source != nullptr)
{
    fread(source, 1, length, file);
    source[length] = '\0';
}
fclose(file);

这将导致以以下字符结尾的字符串

ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ

我发现a site解释了函数ftellfseek在二进制文件的非POSIX系统上不能正常工作,但是这些是普通的文本文件。

是否完全有必要实施其中一些解决方案?如果是,为什么?无论系统如何,功能都不能正常工作吗?

0 个答案:

没有答案
相关问题