2013-05-28 14 views
2

Я использую IPersistFile в C# для загрузки файла, прежде чем читать его как IFilter:Как загрузить IPersistFile из памяти?

IFilter filter = LoadIFilter (fileextension); 
IPersistFile persistFile = (filter as IPersistFile); 
if (persistFile != null) { 
    persistFile.Load (fileName, 0); 
    IFILTER_FLAGS flags; 
    IFILTER_INIT iflags = IFILTER_INIT.FILTER_OWNED_VALUE_OK; 
    if (filter.Init (iflags, 0, IntPtr.Zero, out flags) == IFilterReturnCode.S_OK) { 
     return filter; // will be read using GetChunk/GetText 
    } 
} 

Это прекрасно работает.

Однако я хотел бы загрузить содержимое файла из памяти вместо пути к диску. Это возможно? Интерфейс IPersistFile не показывает другого способа, кроме предоставления строки пути, поэтому кажется, что ни файл с отображением памяти, ни массив байтов не могут использоваться.

ответ

1

В качестве предварительного ответа на эскиз: Мое исследование indicates, что можно было бы отличить до IPersistStream вместо IPersistFile, что позволяет загружать из IStream и, следовательно, из цели памяти.

+0

Да, вся разумная реализация 'IFilter' должна реализовывать' IPersistStream', и вы можете просто попробовать запросить 'IPersistStream' и использовать его. – sharptooth

+0

@sharptooth Спасибо, вижу. Таким образом, IFilter должен реализовать как можно больше интерфейсов IPersistX для использования во всех ситуациях. – mafu

+0

Ну, на самом деле, минимум кажется «IFilter», «IPersistFile» и «IPersistStream». – sharptooth