C # конвертировать файл в формат файла Microsoft Compound, используя OpenMcdf - PullRequest
0 голосов
/ 16 апреля 2019

ОБНОВЛЕНИЕ: Оставляя оригинальный вопрос ниже, так как мне потребовалось много исследований, чтобы даже начать понимать, что все происходит и в какой двоичный формат эти изображения были преобразованы.Оказывается, что Microsoft Access OLE Bound Object Frame принимает файлы и преобразует их в технологию COM (конечно), называемую формат файла Microsoft Compound Document.Я получил это откровение после прочтения статьи: Загрузка и загрузка больших двоичных объектов в Microsoft Access

Как только я это понял, это помогло мне лучше объяснить и сформулировать свой вопрос в том, что я действительно пытаюсь сделатьВыполните что: Преобразование файлов в формат MCDF.В результате поиска в Nuget я нашел библиотеку под названием OpenMCDF, которую добавил в свой проект.Но, как и все устаревшие технологии на основе COM, трудно найти примеры кода.В основном я нашел примеры кода, как вырезать заголовки MCDF, поскольку, очевидно, никто больше не хочет создавать файлы в этом формате, но я верю, что это можно сделать с помощью этой библиотеки.Любая помощь в этом отношении будет высоко ценится!

ОРИГИНАЛЬНЫЙ ВОПРОС: Сложный вопрос, чтобы объяснить, поэтому, пожалуйста, потерпите меня.Возможно, вам придется прочитать полный пост, чтобы понять мой вопрос.В основном я пытаюсь повторить копирование и вставку функциональности Windows Snippet Copy to Clipboard.Мне нужно иметь возможность выбрать изображение из файла и преобразовать его во все, что Windows Snippet преобразует в свои фрагменты буфера обмена.

Я пытался сохранить его в байтах, например:

// Add New Part Image
var imageData = new Bitmap(path);
partImage = new PartImage();
partImage.ImageFile = File.ReadAllBytes(path);
partImage.MasterPartNumber = masterPartNumber;
db.PartImage.Add(partImage);
db.SaveChanges();

enter image description here Как и на снимке экрана выше, вы можете видеть выделенную строку - изображение, добавленное с помощью кода выше, по сравнению с методом копирования и вставки других строк.Это работает, если сохранить его в двоичные данные ... но он не в том же формате, что и копия буфера обмена Snippet.Я думаю, что этот метод сохраняет его как связанный файл по сравнению с тем, что делает инструмент копирования буфера обмена Snippet, так или иначе сохраняя его как своего рода двоичный файл ... Снимок экрана?

Зачем проходить через все эти проблемы, которые, как мне кажется, чаще всегоинтересно?Я поддерживаю устаревшую базу данных Microsoft Access (2010), серверная часть которой частично является SQL Server (2014).Недавно я преобразовал столбец в таблице, в которой использовался тип данных «Изображение», в таблицу FILESTREAM, которая работает нормально.У меня проблема в том, как изображения вводились в базу данных.Сохраненные изображения на самом деле являются снимками экрана, а не ассоциированными файлами, и мне нужно как-то их воспроизвести.

Изображения снимаются с помощью OLE Bound Object Frame.Сегодня я только что узнал, что наш отдел деталей снимает изображения, делая снимок экрана с помощью инструмента фрагмента Windows, затем копируя этот фрагмент и вставляя его непосредственно в рамку объекта OLE Bound!В кадре вы можете видеть изображение ... но в базе данных вы видите результаты двоичного Var.

...