#c# #.net #windows
Вопрос:
Я получаю версию файла таким образом:
var fileVersion = FileVersionInfo.GetVersionInfo(path).FileVersion
Но этот вариант мне не подходит, так как мне приходится использовать неродной инструмент, чтобы получить файл, возвращающий поток. Могу ли я получить версию файла из этого потока или из массива байтов?
Ответ №1:
К сожалению, вы не можете сделать это напрямую
вам следует
- Запишите файл на диск в какое-нибудь временное место
- Прочитайте версию из файла на диске
- Удалите файл
Ответ №2:
Короче говоря, нет, то, что вы хотите, невозможно с помощью текущих инструментов. Проблема в том, что, как вы заметили, FileVersionInfo.GetVersionInfo
для присутствия на диске требуется физический файл. Если вы посмотрите на его внутреннее устройство, вы увидите, что все, что он действительно делает, — это делегирует API Windows, который выполняет реальную работу, именно в функции GetFileVersionInfo, которая, в свою очередь, также принимает имя файла в качестве параметра, поэтому она предназначена только для работы из файловой системы.
Возможным обходным путем было бы удалить временный файл с двоичным файлом, который вы получили из своего потока, получить необходимую информацию о версии, а затем удалить файл.
Другим вариантом было бы поискать библиотеку, которая может анализировать файлы exe/dll в памяти и извлекать соответствующие сведения непосредственно оттуда.
Комментарии:
1. Это выглядит убедительно, но, видимо, те, кому это не нравится, не согласны. Интересно узнать их мнение 🙂