我想将版本存储在数据库表中,并且不希望使用varchar(max)
。我想要一些固定的varchar(xxx)
请告诉我,Windows平台上FileVersionInfo.FileVersion
的最大可能长度是多少?
实际上想出了如何获得正确的版本:
var ver = FileVersionInfo.GetVersionInfo("D:\\oraociei11.dll").FileVersion;
这将返回Oracle lib:
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);
谢谢大家的参与!
答案 0 :(得分:3)
根据this link,它是一个64位数,分为4个16位。
这应该意味着每个部分最多可以达到65535,因此格式化的总字符串可以是65535.65535.65535.65535,总长度为23个字符。
答案 1 :(得分:2)
不,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个字符。
答案 2 :(得分:0)
MSDN表示它由4x16位数字组成。所以我会说5(短的最大值是65535)* 4 + 3点,所以最大大小为23
个字符。
答案 3 :(得分:0)
根据MSDN documentation,FileVersion是一个由64位整数构建的格式化字符串。此整数是可通过FileMajorPart,FileMinorPart,FileBuildPart和FilePrivatePart访问的4个16位整数的串联。因此,你有两个选择,假设2 ^ 16-1 = 32767。
一种选择是在适当的列中构造和存储底层的64位整数,并在加载数据时重新解析它。这可以保证工作,因为它是记录的形式。
如果你可以假设FileVersion的规范形式(框架不保证,因为文档说这只是典型的形式)那么最大长度应该是23(4个数字的数字用句点分隔)。