在 C# 中找出确切的文件类型[重复]

2024-01-20

如您所知,文件具有扩展名和 MIME 类型。 但这两个属性不够智能,无法确定文件的确切类型。例如我有一个.exe文件,我将其重命名为扩展名二.png。因此,如果我尝试以编程方式找出它的类型或 mime 类型,结果将是images/png or .png但我想读取文件头并找出确切的文件类型。可以用C#语言编程吗?

Edit

当然,有些问题与我的类似,但正如您所知,文件以十六进制字符串开头,例如:

"JPEG", ".jpg", 0xFF, /*0xD*/ 0xD8, 0xFF, 0xE0, null, null, 0x4A, 0x46, 0x49, 0x46, 0x00

"Graphics Interchange Format 87a", ".gif", 0x47, 0x49, 0x46, 0x38, 0x37, 0x6

and etc.

文件类型是否具有相似的起始十六进制格式?


您可以尝试检查文件中的某些文件签名或幻数。这是列表的链接已知文件签名 http://www.garykessler.net/library/file_sigs.html并且似乎是最新的:

还有另一种方法可以做同样的事情。使用Winista MIME 检测器 http://www.netomatix.com/Products/DocumentManagement/MimeDetector.aspx.

有一个 XML 文件mime-type.xml包含有关文件类型和用于识别内容类型的签名的信息。您将需要此文件来创建实例MimeTypes目的。一旦你创建了MimeTypes对象,然后调用GetMimeType方法得到MimeType流的。如果无法确定 mime 类型,则此方法将返回 null 对象。以下代码片段演示了该库的使用。

例子 :

  MimeTypes g_MimeTypes = new MimeTypes("mime-types.xml");
    sbyte [] fileData = null;
    using (System.IO.FileStream srcFile = 
        new System.IO.FileStream(strFile, System.IO.FileMode.Open))
    {
        byte [] data = new byte[srcFile.Length];
        srcFile.Read(data, 0, (Int32)srcFile.Length);
        fileData = Winista.Mime.SupportUtil.ToSByteArray(data);
    }
    MimeType oMimeType = g_MimeTypes.GetMimeType(fileData);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中找出确切的文件类型[重复] 的相关文章

  • C# 打印问题(RichTextBox)

    我想打印我的 RichTextBox eintragRichTextBox 的内容 我现在有这个代码 private void druckenPictureBox Click object sender EventArgs e PrintD
  • 添加 Nullable int 时保持 null?

    我想添加可为空的int 并保留null当所有值都是null 我想要这个结果 1 2 3 1 null 1 null null null O null 0 问题是 如果我将一个值与 null 相加 结果为 null int i1 1 int
  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 在 omp 并行 for 循环中使用 unique_ptr 会导致 SEG.FAULT

    采取以下代码 include
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl

随机推荐

  • 只读 mutableStateListOf

    在 Jetpack Compose 中 如果我有MutableState变量 我可以将其状态公开为 只读 对其他类的价值为State
  • currentsessioncontext流畅nhibernate怎么办呢?

    我正在尝试根据请求使用流利的会话 我正在遵循 nhibernate 食谱中的 食谱 但它使用 nhibernate 配置文件 我不确定什么更好 但现在我坚持使用流畅的配置 只是因为我不知道如何设置 nhibernate 配置文件以使用流畅的
  • “gcloud app log tail”显示一周前的数据

    我正在尝试流式传输我的 Google Cloud Platform 应用程序的日志 我注意到的第一件事是 Google 每秒至少发送大约 10 次健康检查 所以我必须grep v health以获得任何有用的信息 这是标准吗 第二件事是它传
  • ASP.NET MVC 4 用户身份验证

    我正在尝试编写一个 Login 方法 对用户进行身份验证并授权他们进入使用 ASP NET MVC 4 开发的网站 问题是 尽管我在 Login 方法内验证用户并重定向到 ViewProfile 操作后调用 FormsAuthenticat
  • 使用 getline 跳过空格

    我正在编写一个程序来制作问题表格 这些问题被保存到一个文件中 我想读取它们并将它们存储在内存中 我为此使用向量 我的问题有以下形式 1 TEXT What is your name 2 CHOICE Are you ready for th
  • jQuery Isotope - 多个过滤器的问题

    我尝试在使用 Isotope js 的类似投资组合的页面中使用多个过滤器 请看一下这个页面 http decart design com avancia wp vi tilbyr http decart design com avancia
  • 为什么不能从一个表中删除引用另一个表

    我一直在寻找答案 但也许我错过了一些东西 我有 2 个表 如下所示 第一个表中的实体是从第二个表中引用的 但是当我尝试从第二个表中删除时 我得到Error foreign key mismatch 有触发器 此处未显示 但它们与DELETE
  • 将文件输入和标准输入传递给 gdb

    所以我想在 gdb 中运行一个程序 并将文件的内容作为参数 然后 当遇到 EOF 时 我希望能够再次输入用户输入 对于终端中的普通程序 我可以使用以下命令执行类似的操作 cat input txt cat program 在 gdb 中 我
  • 在java中从xml解码大型base64:OutOfMemory

    我需要将 xml 文件的 base64 编码元素写入单独的文件中 问题 文件的大小很容易达到 100 MB 我尝试的每个解决方案都以 java lang OutOfMemoryError Java堆空间 结束 问题不在于一般的读取xml或解
  • 如何在我的 Electron 应用程序中隐藏 API 密钥?

    我正在构建一个使用 Google 的 YouTube Data API v3 的 Electron 应用程序 为了访问 API 我决定使用标准 API 密钥 而不是 OAuth 因为我不会访问任何个人数据 但问题是 我无法在我的应用程序中隐
  • React Native Typescript路径别名无法解析模块

    所以基本上 我使用 RN 主页中的命令行创建了 React Native with Typescript npx react native init MyApp template react native template typescri
  • 什么时候应该调用 Fragment 的 onActivityCreated ?

    我在 ViewPager 中有一些片段 并且我找到了片段的onActivityCreated and onCreateView两者都在我预期之前在页面上被调用 例如 当ViewPager从第2页过渡到第3页时 那么第4页的Fragmento
  • IE11无法连接本地IIS,其他浏览器正常

    我正在使用 XIP IO 通配符域访问在本地 IIS 服务器上运行的网站 今天 IE 11 停止访问该网站 而 Chrome 和 Firefox 继续访问 它甚至可以在远程计算机上运行 所以我知道它与我的本地 IE 有关 我检查过没有代理设
  • 如何在r中一次创建数据框(不仅仅是一个)

    这是一个进一步的问题无序组合并将结果存储在 r 的矩阵中 https stackoverflow com questions 53604144 unordered combination and store the result in a
  • 将 Material-UI 的自动完成组件与 Formik 结合使用

    目前正在尝试使用 Material UI自动完成 https material ui com components autocomplete 与 Formik 的组件 到目前为止 诸如文本字段和来自 Material UI 的传统选择之类的
  • URL 重写在 Laravel 应用程序中编译的 CSS 文件中生成错误的 URL

    我尝试在 Laravel 应用程序中编译 Font Awesome SCSS 文件 Font Awesome 随 NPM 安装 编译后的 CSS 存储在 public css 文件夹中 还创建了 public fonts 文件夹 但编译后的
  • 牛顿差分插值法的正确递归python实现,获取递归内的一些返回值

    我用Python编写了一个递归函数来评估一个序列插值法 http en wikipedia org wiki Divided differences Definition 下图对此进行了图形化解释 f x f x and f x0 x1 f
  • C++ 如何传递命令行参数来读取txt文件

    我一直在努力做的是 1 通过命令行参数读取txt文件 2 使用txt文件中的字符串作为main方法 或您需要调用的任何方法 的参数 例如 有两个txt文件 其中一个名为character txt 另一个名为match txt 文件的内容将是
  • 在Android相机上实现连拍模式

    我正在尝试在 Android 相机上实现连拍模式 目前在 ICS 上 我在网上搜索试图找到一些有关此功能的文档并遇到几个问题 需要保存 可能在 asynctask 上 每个捕获的图像值 然后对其进行处理并将其保存在 SD 卡中 在连续模式下
  • 在 C# 中找出确切的文件类型[重复]

    这个问题在这里已经有答案了 如您所知 文件具有扩展名和 MIME 类型 但这两个属性不够智能 无法确定文件的确切类型 例如我有一个 exe文件 我将其重命名为扩展名二 png 因此 如果我尝试以编程方式找出它的类型或 mime 类型 结果将