Как установить расширенные свойства файла? - PullRequest
39 голосов
/ 17 марта 2011

Мне нужно установить значение поля Company для некоторых документов Word / PDF.Я говорю о расширенных свойствах файла (резюме / автор / заголовок и т. Д.), Которые вы видите в разделе «Свойства файла».

Я знаю, как получить их (используя библиотеку классов shell32.dll).Я предполагал, что мог бы также установить их с той же библиотекой классов, но кажется, что написание расширенных свойств немного сложнее, и shell32.dll этого не позволяет.

Я нашел кое-что о taglib-sharp, в котором, кажется, есть опция для установки расширенных свойств, но я не совсем понимаю, как это работает.

Ответы [ 5 ]

48 голосов
/ 23 июня 2016

Решение 2016

Добавьте следующие пакеты NuGet в свой проект:

  • Microsoft.WindowsAPICodePack-Shell от Microsoft
  • Microsoft.WindowsAPICodePack-Core от Microsoft

Свойства чтения и записи

using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;

string filePath = @"C:\temp\example.docx";
var file = ShellFile.FromFilePath(filePath);

// Read and Write:

string[] oldAuthors = file.Properties.System.Author.Value;
string oldTitle = file.Properties.System.Title.Value;

file.Properties.System.Author.Value = new string[] { "Author #1", "Author #2" };
file.Properties.System.Title.Value = "Example Title";

// Alternate way to Write:

ShellPropertyWriter propertyWriter =  file.Properties.GetPropertyWriter();
propertyWriter.WriteProperty(SystemProperties.System.Author, new string[] { "Author" });
propertyWriter.Close();

Важно:

Файл должен быть действительным, созданным определенным назначенным программным обеспечением. Каждый тип файла имеет определенные расширенные свойства файла, и не все из них доступны для записи.

Если вы щелкнете правой кнопкой мыши файл на рабочем столе и не сможете редактировать свойство, вы также не сможете редактировать его в коде.

1023 * * Пример:
  • Создайте txt файл на рабочем столе, переименуйте его расширение в docx. Ты не можешь измените его Author или Title свойство.
  • Откройте его с помощью Word, отредактируйте и сохраните Это. Теперь вы можете.

Так что просто убедитесь, что используете try catch

Следующая тема: MSDN: Реализация обработчиков свойств

24 голосов
/ 18 марта 2011

Хорошо, вот ответ на мой собственный вопрос, так как я не смог найти ответ на этом форуме, он может быть полезен для других.Решением является использование dsofile.dll и OleDocumentPropertiesClass.Вот статья MS о dsofile.dll - Ссылка По этой ссылке вы можете скачать dsofile.dll с некоторыми другими файлами.Но, скорее всего, точно так же, как и я, вы столкнетесь с некоторыми странными проблемами, для которых трудно найти решение.

1) После ввода dsofile.dll вам нужно зарегистрировать класс: oped cmd и перейтив c: \ dsofile или в каталог, в который вы распаковали скачанный dsofile.dll.После этого - напишите строку regsvr32 dsofile.dll .Вы должны получить сообщение о том, что регистрация прошла успешно.Если нет, то, скорее всего, у вас нет прав администратора.Вам понадобятся права администратора, если вы хотите, чтобы это работало.

2) Если вы попытаетесь использовать этот класс в своей программе, если вы используете .NET 4.0, возможно, вы увидите сообщение об ошибкечто-то вроде "класс не может быть встроен ..." Что ж, для этого щелкните правой кнопкой мыши по dsofile в списке ссылок, свойства -> внедрить файлы взаимодействия -> установите в FALSE.

3)Как использовать:

    //creates new class of oledocumentproperties
    var doc = new OleDocumentPropertiesClass();

    //open your selected file
    doc.Open(pathToFile, false, dsoFileOpenOptions.dsoOptionDefault);

    //you can set properties with summaryproperties.nameOfProperty = value; for example
    doc.SummaryProperties.Company = "lol";
    doc.SummaryProperties.Author = "me";

    //after making changes, you need to use this line to save them
    doc.Save();
7 голосов
/ 17 марта 2011

Проводник Windows (с использованием shell32.dll) может отображать расширенные свойства, поскольку он понимает множество различных форматов файлов и может их анализировать.Однако для установки расширенного свойства вам, вероятно, понадобится библиотека, специфичная для формата файла.Например, установить автора файла MP3 очень сильно отличается от настройки автора документа Office.(На самом деле Windows Explorer позволяет вам установить некоторые расширенные свойства для документов Office.)

Taglib-sharp работает только с мультимедийными файлами и, скорее всего, не может устанавливать расширенные свойства любого другого типа файла.

Вам нужна библиотека или инструмент, который вы можете автоматизировать для изменения файлов PDF.Вы можете попробовать Google PDF PDF SDK .Если вам также нужно работать с файлами Word, вы можете использовать автоматизацию COM для автоматизации Word.В зависимости от используемого формата файла Word вы также можете работать с файлом напрямую, не устанавливая Word (XML намного проще, чем старый двоичный формат «потоков»).

2 голосов
/ 13 августа 2015

Спасибо @andree, у меня много ответов. (Для меня это работало только с файлами .doc). Добавлено

if (!doc.IsOleFile)
    Console.ReadLine();

Просто чтобы проверить файл Ole ..

И Visual Studio в качестве администратора

1 голос
/ 07 июля 2016

Чтобы установить свойства, вы можете использовать Система свойств Windows. Он предоставляет интерфейс для доступа к «Кэшу хранилища свойств» (IPropertyStore), где вы можете читать / устанавливать свойства любого файла (независимо от формата).) и добавьте свои собственные пользовательские свойства (библиотека c propkey.h имеет полный список всех доступных свойств; вы также можете найти их, используя prop.exe ).По сути, это создает обработчик свойств, который должен быть позже зарегистрирован в вашем расширении файла.Официально он не поддерживается в управляемом коде, поэтому вы можете написать свою собственную оболочку или использовать c ++ (так как это вопрос с тегом ac #).

Если вы специально запрашиваете свойства мультимедиа, проверьте обработчики метаданных, которые по сути являются кодеками, которые извлекают ваши свойства из файла и также вызываются проводником по умолчанию, если вы правильно их регистрируете.

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