我需要确定我是否位于文件的顶部,只是想知道二进制文件是否有类似于顶部的eof?
答案 0 :(得分:2)
文件根本不包含“EOF”。 EOF
只是fgetc()
和其他函数在检测到文件结尾时返回的特殊值。通过其他方式检测文件的结尾,例如read()
返回0(或者如果您正在读取常规文件,则返回小于请求的字节数)。
如果您使用普通C,则可以使用ftell()
来确定您是否在开头。
答案 1 :(得分:1)
fseek(pFile, 0, SEEK_SET);
的来电成功, fopen
会将您带到您已打开的文件的开头。
确定您是否在文件开头的另一种方法是致电pos = ftell(pFile);
。如果pos
为0
,则您位于文件的开头。
答案 2 :(得分:1)
简单的代码示例:
int main(void)
{
FILE *fp;
long pos=-1;
fp = fopen("c:\\file.exe", "rb");
pos = ftell(fp);//tells you the position of the file ptr.
//For this example, if file exists, pos would be 0
fclose(fp);
return 0;
}
答案 3 :(得分:0)
在大多数操作系统中,“文件是文件是文件”,操作系统级别的文本文件和二进制文件之间没有区别。 Microsoft Windows (以及之前的 DOS )系列是一个值得注意的例外。
通常,文件本身既没有“文件开头”也没有“文件结束”标记:当您打开文件时,文件指针位于文件的开头;当在读取时到达文件的末尾时,返回EOF
(通常为-1),但当操作系统到达文件的末尾(它从文件的大小知道)时,操作系统会自动完成此操作,不是因为文件本身有任何标记。
您可能感兴趣的一个模糊相关的概念是“文件魔术”的概念。不同的文件格式(JPEG,PNG,PDF等)通常在文件开头使用多个字节来标识文件类型和版本(所有PDF版本1.5文件,例如,以“%PDF-1.5”开头) N”)。不幸的是,没有标准,所以偶尔会出现“碰撞”,其中两种不同的文件格式可以具有相同的“魔力”。 Linux / Unix实用程序file
使用文件魔法数据库从初始字节成功识别许多文件类型,但对于不太常见的文件类型并不总是成功