C # .Net 3.5: извлечение и привязка метаданных к файлу - PullRequest
0 голосов
/ 26 сентября 2018

Введение

Я пытаюсь создать приложение для сжатия.Текущее препятствие, с которым я сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь сжать свой файл, я беру массив байтов из файла и применяю алгоритм сжатия к самому байтовому массиву, из-за чего метаданные файла теряются .

Вопрос

Существует ли какой-либо метод, с помощью которого я могу извлечь метаданные файла при сжатии, а затем извлечь его, прикрепив метаданные к извлеченному файлу?

Visual Studio: VS2008
Framework: .Net 3.5

Решения, которые я нашел:

  1. Я видел во многих статьях, что они говорят, что мы можем использовать Система свойств Windows, но даже после прочтения статьи я понятия не имею, как я могу ее реализовать.
  2. Этот веб-сайт объяснил с помощью кода, но не дал никакой ссылки на скачивание дляDLL.
  3. Из этого ответа Stackoverflow Я получил этот код: -
//creates new class of oledocumentproperties
var doc = new OleDocumentPropertiesClass();

//open your selected file
doc.Open(@"C:\Users\ABC\Desktop\Test\1.jpg", false, dsoFileOpenOptions.dsoOptionDefault);

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

//after making changes, you need to use this line to save them
doc.Save();

Я получаю следующую ошибку при Строка 8

ThИмя не является действительным.(Исключение из HRESULT: 0x800300FC (STG_E_INVALIDNAME))

1 Ответ

0 голосов
/ 26 сентября 2018

Вы уверены, что свойство Company существует в метаданных вашего файла?Попробуйте использовать известное существующее свойство в метаданных файла, к которому вы пытаетесь получить доступ, поскольку те, которые используются в примере, могут просто не существовать.

Что касается сохранения свойств, вы можете получить доступ к некоторым основнымглобальные, такие как CreationTime и LastAccessTime от объекта System.IO.FileInfo.

Эта статья , кажется, описывает метод, с помощью которого вы можете получить более конкретные свойства из файлов, такие как свойства Camera и CameraManufacturer (которые не идентичныиз вопроса StackOverflow) примерно так:

using System;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;
using Microsoft.WindowsAPICodePack.Shell;
using System.Diagnostics;

class Program {
    void getProperty() {
        var cameraModel = GetValue(picture.Properties.
        GetProperty(SystemProperties.System.Photo.CameraModel));
    }
}

с GetValue:

private static string GetValue(IShellProperty value)
{
    if (value == null || value.ValueAsObject == null)
    {
        return String.Empty;
    }
    return value.ValueAsObject.ToString();
}
...