Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从字节或流获取文件版本?_C#_.net_Windows - Fatal编程技术网

C# 如何从字节或流获取文件版本?

C# 如何从字节或流获取文件版本?,c#,.net,windows,C#,.net,Windows,我通过以下方式获取文件版本: var fileVersion = FileVersionInfo.GetVersionInfo(path).FileVersion 但是这个选项不适合我,因为我必须使用非本机工具来获取返回流的文件。我可以从这个流或字节数组中获取文件版本吗?很遗憾,您不能直接这样做 你应该 将文件写入某种临时位置的磁盘 从磁盘上的文件读取版本 删除该文件 简言之,不,当前的工具无法满足您的需求。问题是,正如您所注意到的,FileVersionInfo.GetVersionInf

我通过以下方式获取文件版本:

var fileVersion = FileVersionInfo.GetVersionInfo(path).FileVersion

但是这个选项不适合我,因为我必须使用非本机工具来获取返回流的文件。我可以从这个流或字节数组中获取文件版本吗?

很遗憾,您不能直接这样做

你应该

  • 将文件写入某种临时位置的磁盘
  • 从磁盘上的文件读取版本
  • 删除该文件

简言之,不,当前的工具无法满足您的需求。问题是,正如您所注意到的,
FileVersionInfo.GetVersionInfo
依赖于磁盘上的物理文件。如果您查看它的内部结构,您会发现它真正做的只是委托给Windows API,而Windows API正是在中完成真正的工作,而Windows API又将文件名作为参数,因此它仅设计为从文件系统进行操作

一种可能的解决方法是删除一个临时文件,其中包含从流中获得的二进制文件,获取所需的版本信息,然后删除该文件


另一种选择是寻找一个库,它可以解析内存中的exe/dll文件,并从中直接提取相关细节。

这看起来很有说服力,但显然不喜欢的人并不同意。了解他们的意见很有趣:)