我正在尝试获取文件的大小。我正在使用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解释了函数ftell
和fseek
在二进制文件的非POSIX系统上不能正常工作,但是这些是普通的文本文件。
是否完全有必要实施其中一些解决方案?如果是,为什么?无论系统如何,功能都不能正常工作吗?