Создание объекта IStorage, указывающего на путь к папке

Я пытаюсь изменитьkeywordсвойство (в наборе свойств Сводная информация ) папки.

Я знаю, что я могу сделать это, используяStgCreatePropSetStg()функция, которая принимает объект, который будет содержать наборы свойств. Затем я могу получить использованиеStgCreateStorageEx().

Одна вещь, которая меня беспокоит, заключается в том, что я не знаю, как сделать так, чтобы сгенерированный объект указывал на путь к папке, для которой я хочу изменить свойство.

Я попытался изменить образец в документации и в итоге получил следующее:

      #include <stdio.h>
#include <windows.h>
#include <ole2.h>

int main() {

   HRESULT hr = S_OK;
   IPropertySetStorage *pPropSetStg = NULL;
   IPropertyStorage *pPropStg = NULL;
   WCHAR *pwszError = L"";
   PROPSPEC propspec; 
   PROPVARIANT propvarWrite; 
   PROPVARIANT propvarRead;

   try
   {
        // Create a file and a property set within it.

        //  ~~~~~ I`m not sure how to make an IStorage object point to a folder path
        hr = StgCreateStorageEx( L"WriteRead.stg",
                   STGM_CREATE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE,
                   STGFMT_STORAGE,
                   // STGFMT_STORAGE => Structured Storage 
                                     // property sets
                   // STGFMT_FILE    => NTFS file system 
                                     // property sets
                   0, NULL, NULL,
                   IID_IPropertySetStorage,
                   reinterpret_cast<void**>(&pPropSetStg) );
        if( FAILED(hr) ) throw L"Failed StgCreateStorageEx";

        hr = pPropSetStg->Create( fmtid, NULL, PROPSETFLAG_DEFAULT, 
                    STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE,
                    &pPropStg );
        if( FAILED(hr) ) throw L"Failed IPropertySetStorage::Create";

        // Write a Unicode string property to the property set

        propspec.ulKind = PRSPEC_LPWSTR;
        propspec.lpwstr = L"PIDSI_KEYWORDS";

        propvarWrite.vt = VT_LPWSTR;
        propvarWrite.pwszVal = L"Testing Tag";

        hr = pPropStg->WriteMultiple( 1, &propspec, &propvarWrite, 
                                      PID_FIRST_USABLE );
        if( FAILED(hr) ) 
            throw L"Failed IPropertyStorage::WriteMultiple";

        // Commit changes to the property set.

        hr = pPropStg->Commit(STGC_DEFAULT);
        if( FAILED(hr) ) 
            throw L"Failed IPropertyStorage::Commit";

        // Close and reopen everything.

        pPropStg->Release(); pPropStg = NULL;
        pPropSetStg->Release(); pPropSetStg = NULL;
   }
   catch( const WCHAR *pwszError )
   {
       wprintf( L"Error:  %s (hr=%08x)\n", pwszError, hr );
   }

   PropVariantClear( &propvarRead );

   if( pPropStg ) pPropStg->Release();
   if( pPropSetStg ) pPropSetStg->Release();
}

Сказав все это,

Мои вопросы: как сделать так, чтобы сгенерированный объект указывал наfolder path?

Кроме того, если у меня есть некоторое неправильное представление о том, какIStorageработает, поправьте меня.

0 ответов

Другие вопросы по тегам