【问题标题】:Get extension from a file which is has not extension [duplicate]从没有扩展名的文件中获取扩展名[重复]
【发布时间】:2018-10-05 05:03:39
【问题描述】:

有什么方法可以获取(实际上是猜测!)扩展文件? 在我的程序中,某处我得到一个文件,应用程序对其进行分析以了解它是 ZIP 还是 MOV。

我发现this,但它不支持MOV和ZIP。

更新:

通过创建一个包含文件签名前 8 位的文本文件。 和下面的代码,我可以确定每个没有扩展名的文件。 this 页面可能是一个很好的参考。

        string rootPath = $"{name}";
        using (FileStream fsSource = new FileStream(rootPath, FileMode.Open, FileAccess.Read))
        {
            byte[] fileBytes = new byte[8]; // the number of bytes you want to read
            fsSource.Read(fileBytes, 0, 8);

            /*
             zip = 50-4B-03-04-0A-00-00-00
             mov = 00-00-00-20-66-74-79-70
             html = 3C-21-64-6F-63-74-79-70
             rar 1 = 52-61-72-21-1A-07
             rar 5 = 52-61-72-21-1A-07 

            */
            string filestring = BitConverter.ToString(fileBytes);
            // string filestring = Encoding.UTF8.GetString(fileBytes); 
            File.WriteAllText($"{DownloadPath}\\filestring.txt", filestring);
        }

【问题讨论】:

  • 阅读这些文件格式。然后打开文件并检查结构以确定类型。
  • 文件扩展名只是一些文本。你的意思是文件类型吗?
  • @Plutonix 是的,正是我的意思!
  • @Adriani6 这实际上并不少见,尤其是对于 Unix 中的文件或来自与 Unix 密切相关的程序的文件。
  • 文件不必有扩展名。您可以检查其标题以确定其类型。 ZIP 和 MOV 等格式定义明确,您可以在 Internet 上找到它们的标头信息。

标签: c# .net winforms


【解决方案1】:

只要读取文件的头部部分(文件开头的几个字节)就可以检测出它的格式。

例如this page 有关于 mov 文件的信息。

你可以像这段代码一样读取文件头(这里我假设读取 4 个字节就足够了,但是,如果你需要更多/更少的字节来确定格式,你可以随意更改它):

 using (FileStream fsSource = new FileStream(pathSource, FileMode.Open, FileAccess.Read))
 {
     byte[] bytes = new byte[4]; // the number of bytes you want to read
     fsSource.Read(bytes, 0, 4);
 }

【讨论】:

  • 谢谢,其实它是你的!我只想修复它的错误!
  • 4-letter 扩展文件呢?
  • @GonzaloLorieto,我们不是在这里讨论扩展名,我们打开文件并读取文件的 4 个(在这里)第一个字节并确定文件扩展名应该是 mov、zip 还是其他
  • 我看错了。很好的解决方案。我很抱歉
  • @GonzaloLorieto 不客气。
猜你喜欢
  • 2015-02-14
  • 1970-01-01
  • 2011-12-28
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 2011-09-13
相关资源
最近更新 更多