В настоящее время я работаю над плагином для AutoCAD, который позволяет пользователям взаимодействовать с приложением управления версиями документов, и для синхронизации файлов между удаленным репозиторием и локальным компьютером я планировал использовать пользовательские свойства файлов. Свойства устанавливаются при первоначальной загрузке файла, а затем сохраняются до тех пор, пока файл остается на локальном диске пользователя. Меня не очень интересует решение, специфичное для AutoCAD, поскольку мой плагин будет работать с файлами, отличными от чертежей AutoCAD (текстовые файлы, файлы изображений и т. Д.). Поэтому мне нужна библиотека, которая может обрабатывать как можно больше потенциальных типов файлов.
При поиске способов реализации такого рода вещей в C # я почти сразу наткнулся на библиотеку DSOFile. Все, что я прочитал, говорит, что оно было разработано для MS Office, но оно должно работать с любым файлом, если файловая система NTFS (по крайней мере, это мое понимание). У меня не было проблем с настройкой пользовательских свойств для файлов, таких как текстовые документы (.txt), чертежи AutoCAD (.dwg) и изображения (.jpg, .tif и т. Д.). Однако я заметил, что после сохранения любого из этих файлов пользовательские свойства стирались. Единственный случай, когда я видел, что пользовательские свойства сохранялись после сохранения, был в документах MS Office. Я полагал, что эта проблема связана с приложением, которое я использовал для сохранения файлов (AutoCAD, MS Paint, блокнот и т. Д.), Но я не могу быть на 100% уверен в этом. Прежде чем я решу заняться решением, отличным от использования DSOFile, я хотел узнать, есть ли у кого-то из SO какое-то понимание этой проблемы.
Я протестировал, используя свой собственный код и демонстрацию, поставляемую с DSOFile, и оба раза видел один и тот же результат. Пользовательские свойства были удалены после сохранения любого типа файла, кроме документа MS Office (Word и Excel).
Вот пример, подобный коду, который я бы использовал для добавления нового пользовательского свойства ...
var docProperties = new OleDocumentProperties();
docProperties.Open("myfile.txt", false, dsoFileOpenOptions.dsoOptionDefault);
try
{
object value = "some value";
docProperties.CustomProperties.Add("MyCustomProp", ref value);
}
finally
{
docProperties.Close(true); // save and close
}