【问题标题】:How to check the given file is binary file or not in C programming?如何在 C 编程中检查给定文件是否为二进制文件?
【发布时间】:2016-10-24 05:57:41
【问题描述】:

我正在尝试检查给定的文件是binary or not。 我参考下面给出的链接来找到解决方案, How can I check if file is text (ASCII) or binary in C

但是给定的解决方案不能正常工作,如果我将.c 文件作为参数传递,它不能正常工作,它会给出错误的输出。

我可以作为参数传递的可能文件:

a.out

文件名.c

文件名.txt

文件名.pl

文件名.php

所以我需要知道是否有任何功能或方法可以解决问题?

谢谢...

注意:[如有任何疑问,请在投票前询问我]

【问题讨论】:

  • 对你/你的任务来说什么是二进制文件?检查文件扩展名是否足够或是否需要解析文件。你也可以考虑提供你不工作的代码供社区检查。
  • 不,我不会检查扩展名,我需要解析文件并发现文件是否为二进制文件。
  • 我正在尝试在 c 中实现 'grep' 命令
  • 您真的要检查文件中的每个字节以确保它在 ASCII 范围内吗?如果文件很大,它会花费你。 Unicode 和各种 UTF 编码呢?它们也是文本文件。还是一个主要是 ASCII 但包含一些非 ASCII 字节的文件?也可以考虑grep如何处理:unix.stackexchange.com/questions/19907/…
  • 你在 Linux 上吗?如果是,只需使用命令“file ”并查看输出。然后,您可以使用 system() 从 C 程序中调用此命令。有关“文件”命令输出的更多详细信息,请参阅 man 或在此处查看 - linux.die.net/man/1/file

标签: c


【解决方案1】:

您需要明确定义什么是二进制文件,然后以此为基础进行检查。

如果您只想根据文件扩展名进行过滤,请创建一个您认为是二进制文件的列表,以及一个您不考虑二进制文件的列表,然后根据它进行检查。

如果您有一个已知格式列表而不是文件扩展名,请尝试解析格式中的文件,如果它不解析/解析结果没有意义,则它是一个二进制文件(出于您的目的)。

【讨论】:

  • 在类 UNIX 平台上,还有 libmagicfile 的 C 接口,可用于检测文件类型
【解决方案2】:

根据您的操作系统,二进制文件以标头开头,指定它们是可执行文件并包含有关它们的若干信息(架构、大小、字节顺序等)。因此,通过尝试解析此标头,您应该知道文件是否为二进制文件。如果你在 mac 上,检查 Mach-O 文件格式,如果你在 Linux 上,它应该是 ELF 格式。但请注意,它包含大量文档。

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 2011-02-11
    • 2020-06-27
    • 2013-01-15
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多