【问题标题】:Get file name from byte array or Stream从字节数组或流中获取文件名
【发布时间】:2012-02-03 05:54:05
【问题描述】:

是否可以从字节数组或流中获取文件名? 我不会保存文件。我只是想找回它的名字。

【问题讨论】:

    标签: c# arrays .net stream


    【解决方案1】:

    您将无法从字节数组中获取文件名。相反,您需要 filestream 来获取文件的名称。字节数组不存储名称。

    【讨论】:

      【解决方案2】:

      不,这是不可能的(好吧,所以在FileStream 课堂上可能是可能的,每天都能学到新东西!)。

      字节数组或流表示文件的内容,而不是关于文件的 Windows 元数据 .

      有很多简单的方法可以保留这些信息,但由于不了解您的情况,我无法提供解决方案。

      【讨论】:

      • 嗨@Adam,我明白了。感谢您的帮助。
      【解决方案3】:

      如果Stream 实际上是FileStream,则可能可以通过转换为FileStream 并访问.Name 属性来获得:

      Stream stream = ...
      FileStream fs = stream as FileStream;
      if(fs != null) Console.WriteLine(fs.Name);
      

      但是,一般情况下:不,这不可用。 byte[] 当然没有文件名的概念,大多数其他类型的流也没有。同样,被其他流(压缩、加密、缓冲等)包装的FileStream 基本流不会公开此类信息,尽管底层流(向下几层)是一个文件。

      我会单独处理文件名。

      【讨论】:

      • +1 以前从未发现过该属性,尽管我不太可能使用它哈哈
      • 嗨@Marc,感谢您的出色解释。我会尝试发布结果。
      • 嗨,在 wcf 中我返回一个 FileStream,但客户端我得到一个 MessageBodyStream。有什么建议吗?
      • @Gus 是的:那么您无权访问文件名 - 只有流内容由 WCF 上传
      • 如果我能把这篇文章读到最后,我会节省几个小时。感谢您的解释。
      【解决方案4】:

      所有文件信息(例如名称、扩展名等)都是实际文件元数据的一部分。字节数组将只保存实际数据。如果字节数组本身包含元数据(例如 xml 文件),则可能有可能......但是,您需要知道类型以及具体在哪里查看。

      【讨论】:

      • 嗨@Code,感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多