什么是二进制文件的开头

时间:2014-04-04 20:47:28

标签: c file eof

我需要确定我是否位于文件的顶部,只是想知道二进制文件是否有类似于顶部的eof?

4 个答案:

答案 0 :(得分:2)

文件根本不包含“EOF”。 EOF只是fgetc()和其他函数在检测到文件结尾时返回的特殊值。通过其他方式检测文件的结尾,例如read()返回0(或者如果您正在读取常规文件,则返回小于请求的字节数)。

如果您使用普通C,则可以使用ftell()来确定您是否在开头。

答案 1 :(得分:1)

假设fseek(pFile, 0, SEEK_SET);的来电成功,

fopen会将您带到您已打开的文件的开头。

确定您是否在文件开头的另一种方法是致电pos = ftell(pFile);。如果pos0,则您位于文件的开头。

答案 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;   
}

另请参阅 ftell rewind fseek ,(等,可搜索的页面)

答案 3 :(得分:0)

在大多数操作系统中,“文件是文件是文件”,操作系统级别的文本文件和二进制文件之间没有区别。 Microsoft Windows (以及之前的 DOS )系列是一个值得注意的例外。

通常,文件本身既没有“文件开头”也没有“文件结束”标记:当您打开文件时,文件指针位于文件的开头;当在读取时到达文件的末尾时,返回EOF(通常为-1),但当操作系统到达文件的末尾(它从文件的大小知道)时,操作系统会自动完成此操作,不是因为文件本身有任何标记。

您可能感兴趣的一个模糊相关的概念是“文件魔术”的概念。不同的文件格式(JPEG,PNG,PDF等)通常在文件开头使用多个字节来标识文件类型和版本(所有PDF版本1.5文件,例如,以“%PDF-1.5”开头) N”)。不幸的是,没有标准,所以偶尔会出现“碰撞”,其中两种不同的文件格式可以具有相同的“魔力”。 Linux / Unix实用程序file使用文件魔法数据库从初始字节成功识别许多文件类型,但对于不太常见的文件类型并不总是成功