Максимально возможная длина строки FileVersionInfo.FileVersion в Windows - PullRequest
0 голосов
/ 12 сентября 2011

Я хочу сохранить версию в таблице базы данных и не хочу использовать varchar(max) для этого.Я хочу что-то исправить varchar(xxx)

Подскажите, пожалуйста, какова максимально возможная длина FileVersionInfo.FileVersion на платформах Windows?

Собственно выяснили, как получить правильную версию:

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);

Спасибо, ребята, за участие!

Ответы [ 4 ]

3 голосов
/ 12 сентября 2011

Согласно эта ссылка это 64-битное число, разбитое на 4 части по 16 бит.

Это должно означать, что в каждом разделе может быть до 65535, поэтому общая форматированная строка может быть 65535.65535.65535.65535, что дает общую длину 23 символа.

2 голосов
/ 12 сентября 2011

Нет, 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 символов.

0 голосов
/ 12 сентября 2011

Согласно документации MSDN , FileVersion - это отформатированная строка, построенная из 64-разрядного целого числа.Это целое число является объединением 4 16-битных целых чисел, доступных через FileMajorPart, FileMinorPart, FileBuildPart и FilePrivatePart.Таким образом, у вас есть два варианта, учитывая, что 2 ^ 16-1 = 32767.

Один из вариантов - создать и сохранить лежащее в основе 64-разрядное целое число в соответствующем столбце и повторно проанализировать его при загрузке данных.,Это гарантированно будет работать, поскольку это документированная форма.

Если вы можете принять каноническую форму FileVersion (которая не гарантируется платформой, так как документация говорит, что это просто типичная форма), тогдамаксимальная длина должна быть 23 (4 5-значных чисел, разделенных точками).

0 голосов
/ 12 сентября 2011

MSDN говорит, что он состоит из 4x16-битных чисел. Поэтому я бы сказал, что 5 (максимальный размер для 65535) * 4 + 3 точки, поэтому максимальный размер 23 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...