FileVersionInfo的最大可能长度.Windows上的FileVersion字符串

本文关键字:Windows 上的 FileVersion 字符串 FileVersionInfo | 更新日期: 2023-09-27 18:08:32

我想在数据库表中存储版本,不想使用varchar(max)。我想要固定的varchar(xxx)

请告诉我,FileVersionInfo.FileVersion在Windows平台上的最大可能长度是多少?

实际上找出了如何得到正确的版本:

var ver = FileVersionInfo.GetVersionInfo("D:''oraociei11.dll").FileVersion;

返回Oracle库:

OraOCIEI11.dll - 11.2.0.1.0 Production
oracore11.dll - 11.2.0.1.0 Production
oranls11.dll - 11.1.0.6.0 Production
orasnls11.dll - 11.1.0.6.0 Production
oraunls11.dll - 11.1.0.6.0 Production
oravsn11.dll - 11.2.0.2.0 Production
oracommon11.dll - 11.2.0.2.0 Production
orageneric11.dll - 11.2.0.2.0 Production
oraclient11.dll - 11.2.0.2.0 Production
orapls11.dll - 11.1.0.6.0 Production
orasql11.dll - 11.1.0.6.0 Production
oraxml11.dll - 11.1.0.6.0 Production
orahasgen11.dll - 11.2.0.1.0 Production
oraocrutl11.dll - 11.2.0.1.0 Production
oraocr11.dll - 11.2.0.1.0 Production
oraocrb11.dll - 11.2.0.1.0 Production
oranbeq11.dll - 11.2.0.2.0 Production
orantcp11.dll - 11.2.0.2.0 Production
orantcps11.dll - 11.2.0.2.0 Production
orannmp11.dll - 11.2.0.2.0 Production
orancds11.dll - 11.2.0.2.0 Production
oranldap11.dll - 11.2.0.2.0 Production
oraldapclnt11.dll - 10.1.4.0.1 Production
oraolapapi11.dll - 
oranhost11.dll - 11.2.0.2.0 Production
orantns11.dll - 11.2.0.2.0 Production
oranoname11.dll - 
oransgr11.dll - 11.2.0.2.0 Production
orancrypt11.dll - 11.2.0.2.0 Production
oransgr11.dll - 11.2.0.2.0 Production
oranl11.dll - 11.2.0.2.0 Production
oranro11.dll - 11.2.0.2.0 Production
oranbeq11.dll - 11.2.0.2.0 Production
orantcps11.dll - 11.2.0.2.0 Production
orannmp11.dll - 11.2.0.2.0 Production
orancds11.dll - 11.2.0.2.0 Production
oranldap11.dll - 11.2.0.2.0 Production
oraldapclnt11.dll - 10.1.4.0.1 Production
orannzsbb11.dll - 11.0.0.1.0 Production
oran11.dll - 11.2.0.2.0 Production
orannzmcs11.dll - 11.0.0.1.0 Production
oranjssl11.dll - 11.2.0.2.0 Production
oranjni11.dll - 11.2.0.2.0 Production
oranipc11.dll - 11.2.0.2.0 Production

以正确的方式获取文件版本:

var versionInfo = FileVersionInfo.GetVersionInfo("D:''oraociei11.dll");
var properVersion = string.Format("{0}.{1}.{2}.{3}", versionInfo.FileMajorPart, versionInfo.FileMinorPart, versionInfo.FileBuildPart, versionInfo.FilePrivatePart);

感谢大家的参与!

FileVersionInfo的最大可能长度.Windows上的FileVersion字符串

根据这个链接,它是一个64位的数字,分成4个16位的片段。

这应该意味着每个部分最多可以65535,所以总格式化字符串可以是65535.65535.65535.65535,总长度为23个字符。

不,FileVersion是一个字符串,可以包含任何内容。Visual Studio资源编辑器允许输入最多300个字符的字符串。然而,这不是由资源编译器强制的,更长的字符串可以通过手工编辑。rc文件来输入。

你需要做的是自己合成版本字符串,像这样:

        var info = System.Diagnostics.FileVersionInfo.GetVersionInfo(path);
        var version = string.Format("{0}.{1}.{2}.{3}", 
            info.FileMajorPart, info.FileMinorPart, info.FileBuildPart, info.FilePrivatePart);

确保该字符串永远不会超过23个字符。

MSDN说它是由4x16位数字组成的。所以我会说5(最大是65535)* 4 + 3点,所以23字符的最大大小。

根据MSDN文档,FileVersion是由64位整数构建的格式化字符串。这个整数是4个16位整数的连接,可以通过filemmajor part, FileMinorPart, filbuildpart和FilePrivatePart访问。因此,您有两个选择,给定2^16-1 = 32767。

一种选择是在适当的列中构造并存储底层64位整数,并在加载数据时重新解析它。这可以保证工作,因为它是文档形式。

如果你可以假设FileVersion的规范形式(框架不保证,因为文档说这只是典型的形式),那么最大长度应该是23(4个5位数字,由句号分隔)。