Condividi tramite


Metodo IPropertyStorage::Commit (propidlbase.h)

Il metodo IPropertyStorage::Commit salva le modifiche apportate a un oggetto di archiviazione delle proprietà nell'oggetto di archiviazione padre.

Sintassi

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Parametri

[in] grfCommitFlags

Flag che specificano le condizioni in cui deve essere eseguito il commit. Per altre informazioni su flag specifici e sui relativi significati, vedere la sezione Osservazioni.

Valore restituito

Questo metodo supporta il valore restituito standard E_UNEXPECTED, nonché quanto segue:

Commenti

Analogamente a IStorage::Commit, il metodo IPropertyStorage::Commit garantisce che le modifiche apportate a un oggetto di archiviazione delle proprietà vengano riflesse nella risorsa di archiviazione padre.

In modalità diretta nell'implementazione del file composto, una chiamata a questo metodo causa lo scaricamento delle modifiche attualmente presenti nei buffer di memoria nel flusso di proprietà sottostante. Nell'implementazione del file composto per i set di proprietà nonsimple , IStorage::Commit viene chiamato anche nell'oggetto sottostorage sottostante con il parametro grfCommitFlags passato.

In modalità transazionata, questo metodo fa sì che le modifiche vengano riflesse in modo permanente nell'immagine persistente dell'oggetto di archiviazione. Le modifiche di cui è stato eseguito il commit devono essere state apportate a questo set di proprietà dopo l'apertura o dall'ultimo commit all'apertura del set di proprietà. Il metodo commit pubblica le modifiche apportate a un livello di oggetto al livello successivo. Naturalmente, questo rimane soggetto a qualsiasi transazione a livello esterno che può essere presente sull'oggetto in cui è contenuto questo set di proprietà. È necessario specificare l'autorizzazione di scrittura quando il set di proprietà viene aperto (tramite IPropertySetStorage) nel set di proprietà che apre l'operazione di commit per l'esito positivo dell'operazione di commit.

Se l'operazione di commit non riesce per qualsiasi motivo, lo stato dell'oggetto di archiviazione della proprietà rimane invariato prima del commit.

Questa chiamata non ha alcun effetto sulle proprietà esistenti con valori di archiviazione o flusso aperte da questa risorsa di archiviazione delle proprietà, ma ne esegue il commit.

I valori validi per il parametro grfCommitFlags sono elencati nella tabella seguente.

Valore Significato
STGC_DEFAULT Commit in base alla consueta semantica delle transazioni. L'ultimo scrittore vince. Questo flag potrebbe non essere specificato con altri valori di flag.
STGC_ONLYIFCURRENT Esegue il commit delle modifiche solo se il contenuto permanente corrente del set di proprietà è quello su cui viene eseguito il commit delle modifiche da eseguire. Ovvero, non esegue il commit delle modifiche se il contenuto del set di proprietà è stato modificato da un commit da un'altra apertura del set di proprietà. L'errore STG_E_NOTCURRENT viene restituito se il commit non riesce per questo motivo.
STGC_OVERWRITE Utile solo quando si esegue il commit di una transazione senza ulteriore livello di annidamento esterno delle transazioni, anche se accettabile in tutti i casi.
Nota Indica che il chiamante è disposto a rischiare un danneggiamento dei dati a scapito della riduzione dell'utilizzo del disco nel volume di destinazione. Questo flag è potenzialmente utile negli scenari di spazio su disco insufficiente, anche se deve essere usato con cautela.
 
 
Nota L'uso di IPropertyStorage::Commit per scrivere proprietà nei file di immagine in Windows XP non funziona. I formati di file di immagine interessati includono:
  • bmp
  • dib
  • emf
  • gif
  • ico
  • jfif
  • jpe
  • jpeg
  • jpg
  • png
  • .Rle
  • tiff
  • .Wmf
A causa di un bug nel gestore delle proprietà del file di immagine in Windows XP, la chiamata a IPropertyStorage::Commit elimina effettivamente tutte le modifiche apportate anziché renderle persistenti.

Una soluzione alternativa consiste nel

omettere la chiamata a IPropertyStorage::Commit. Chiamando IUnknown::Release nel gestore delle proprietà del file di immagine XP senza chiamare IPropertyStorage::Commit esegue innanzitutto il commit implicito delle modifiche apportate al file. Si noti che in generale, la chiamata a IUnknown::Release senza prima chiamare IPropertyStorage::Commit eliminerà le modifiche apportate; questa soluzione alternativa è specifica per il gestore delle proprietà del file di immagine in Windows XP. Si noti anche che nelle versioni successive di Windows questo componente funziona correttamente, ovvero la chiamata a IPropertyStorage::Commit mantiene le modifiche e chiama IUnknown::Release senza chiamare IPropertyStorage::Commit li rimuove.

 

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione propidlbase.h (include Objbase.h, Propidlbase.h)
Libreria Uuid.lib
DLL Ole32.dll

Vedi anche

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit