Получение расширенных свойств файла в .Net Core

Я хочу читать расширенные свойства, такие как Product Version, Author и т.д. из файла с помощью .Net Core.

Были такие классы, как FileVersionInfo, которые использовали для предоставления информации о версии, объект Shell, чтобы больше узнать о файле и т.д.

Теперь я больше не нахожу таких классов. Как читать эту информацию с помощью .Net Core?

Ответ 1

FileVersionInfo можно легко найти на NuGet, он находится в System.Diagnostics пространство имен с самого начала, поэтому вам просто нужно установить пакет:

Install-Package System.Diagnostics.FileVersionInfo

и используйте этот класс как обычно, получая информацию о файле из некоторого IFileProvider, например, PhysicalFileProvider:

using System.Diagnostics;

var provider = new PhysicalFileProvider(applicationRoot);
// the applicationRoot contents
var contents = provider.GetDirectoryContents("");
// a file under applicationRoot
var fileInfo = provider.GetFileInfo("wwwroot/js/site.js");
// version information
var myFileVersionInfo = FileVersionInfo.GetVersionInfo(fileInfo.PhysicalPath);
//  myFileVersionInfo.ProductVersion is available here

Для информации Author вы должны использовать класс FileSecurity, который находится в пространстве имен System.Security.AccessControl, с типом System.Security.Principal.NTAccount:

Install-Package System.Security.AccessControl
Install-Package System.Security.Principal

после этого использования аналогично:

using System.Security.AccessControl;
using System.Security.Principal;

var fileSecurity = new FileSecurity(fileInfo.PhysicalPath, AccessControlSections.All);
// fileSecurity.GetOwner(typeof(NTAccount)) is available here

Общее правило сейчас состоит в том, чтобы ввести полное имя класса для Google и добавить в него core или nuget, чтобы вы обязательно получили нужный файл с новым местоположением.

Ответ 2

возможно, вы можете использовать File Info Provider в ядре .net.

IFileProvider provider = new PhysicalFileProvider(applicationRoot);
IDirectoryContents contents = provider.GetDirectoryContents(""); // the applicationRoot contents
IFileInfo fileInfo = provider.GetFileInfo("wwwroot/js/site.js"); // a file under applicationRoot

Итерация по объекту fileInfo.

Смотрите это для получения дополнительной информации:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/file-providers

Надеюсь, это поможет.