Condividi tramite


implementazione di IStorage-Compound file

L'implementazione di file composta di IStorage consente di creare e gestire sottostorage e flussi all'interno di un oggetto di archiviazione che risiede in un oggetto file composto. Per creare un oggetto file composto e ottenere un puntatore IStorage, chiamare la funzione API StgCreateStorageEx. Per aprire un oggetto file composto esistente e ottenere il puntatore IStorage radice, chiamare StgOpenStorageEx.

Le applicazioni che usano l'archiviazione composta devono essere registrate in HKEY_CLASSES_ROOT\SystemFileAssociations e devono fornire i propri gestori delle proprietà. Per altre informazioni, vedere la sezione "Registrazione di verbi e altre informazioni sull'associazione file" di registrazione dell'applicazione.

Quando usare

La maggior parte delle applicazioni usa questa implementazione per creare e gestire archivi e flussi.

Metodi

IStorage::CreateStream

Crea e apre un oggetto flusso con il nome specificato contenuto in questo oggetto di archiviazione. Il nome non deve superare i 31 caratteri di lunghezza ,senza includere il carattere di terminazione della stringa. I caratteri da 000 a 01f, che fungono da primo carattere del nome di flusso/archiviazione, sono riservati per l'uso da OLE. Si tratta di una restrizione di file composta, non di una restrizione di archiviazione strutturata. L'implementazione del file composto fornito da COM del metodo IStorage::CreateStream non supporta i comportamenti seguenti:

  • Il flag STGM_DELETEONRELEASE non è supportato.
  • La modalità transacted (STGM_TRANSACTED) non è supportata per gli oggetti flusso.
  • L'apertura dello stesso flusso più volte dalla stessa risorsa di archiviazione non è supportata. Il flag STGM_SHARE_EXCLUSIVE modalità di condivisione deve essere specificato nel parametro grfMode.

IStorage::OpenStream

Apre un oggetto flusso esistente all'interno di questo oggetto di archiviazione usando le modalità di accesso specificate nel parametro grfMode. I caratteri da 000 a 01f, che fungono da primo carattere del nome di flusso/archiviazione, sono riservati per l'uso da OLE. Si tratta di una restrizione di file composta, non di una restrizione di archiviazione strutturata. L'implementazione del file composto fornito da COM del metodo IStorage::OpenStream non supporta il comportamento seguente:

  • Flag STGM_DELETEONRELEASE.
  • Modalità transacted (STGM_TRANSACTED) per gli oggetti flusso.
  • Apertura dello stesso flusso più volte dalla stessa risorsa di archiviazione. È necessario specificare il flag STGM_SHARE_EXCLUSIVE.

IStorage::CreateStorage

Crea e apre un nuovo oggetto di archiviazione con il nome specificato nella modalità di accesso specificata. Il nome non deve superare i 31 caratteri di lunghezza ,senza includere il carattere di terminazione della stringa. I caratteri da 000 a 01f, che fungono da primo carattere del nome di flusso/archiviazione, sono riservati per l'uso da OLE. Si tratta di una restrizione di file composta, non di una restrizione di archiviazione strutturata. L'implementazione del file composto fornito da COM del metodo IStorage::CreateStorage non supporta il comportamento seguente:

  • Flag STGM_PRIORITY per le risorse di archiviazione nonroot.
  • Apertura dello stesso oggetto di archiviazione più volte dalla stessa risorsa di archiviazione padre. È necessario specificare il flag STGM_SHARE_EXCLUSIVE.
  • Flag STGM_DELETEONRELEASE. Se si specifica questo flag, la funzione restituisce STG_E_INVALIDFLAG.

IStorage::OpenStorage

Apre un oggetto di archiviazione esistente con il nome specificato nella modalità di accesso specificata. I caratteri da 000 a 01f, che fungono da primo carattere del nome di flusso/archiviazione, sono riservati per l'uso da OLE. Si tratta di una restrizione di file composta, non di una restrizione di archiviazione strutturata. L'implementazione del file composto fornito da COM del metodo IStorage::OpenStorage non supporta il comportamento seguente:

  • Flag STGM_PRIORITY per le risorse di archiviazione nonroot.
  • Apertura dello stesso oggetto di archiviazione più volte dalla stessa risorsa di archiviazione padre. È necessario specificare il flag STGM_SHARE_EXCLUSIVE.
  • Flag STGM_DELETEONRELEASE. Se si specifica questo flag, la funzione restituisce STG_E_INVALIDFUNCTION.

IStorage::CopyTo

Copia solo le sottostorage e i flussi di questo oggetto di archiviazione aperto in un altro oggetto di archiviazione. Il parametro rgiidExclude può essere impostato su IID_IStream per copiare solo sottostorage o per IID_IStorage per copiare solo i flussi.

IStorage::MoveElementTo

Copia o sposta un sottostorage o un flusso da questo oggetto di archiviazione a un altro oggetto di archiviazione.

IStorage::Commit

Assicura che le modifiche apportate a un oggetto di archiviazione aperto in modalità transazionali vengano riflesse nell'archiviazione padre; per un archivio radice, riflette le modifiche nel dispositivo effettivo; ad esempio un file su disco. Per un oggetto di archiviazione radice aperto in modalità diretta, questo metodo non ha alcun effetto, ad eccezione dello scaricamento di tutti i buffer di memoria sul disco. Per gli oggetti di archiviazione nonroot in modalità diretta, questo metodo non ha alcun effetto.

L'implementazione dei file composti forniti da COM usa un processo di commit a due fasi, a meno che STGC_OVERWRITE non sia specificato nel parametro grfCommitFlags. Questo processo in due fasi garantisce l'affidabilità dei dati, nel caso in cui l'operazione di commit non riesca. Prima di tutto, tutti i nuovi dati vengono scritti nello spazio inutilizzato nel file sottostante. Se necessario, viene allocato nuovo spazio al file. Al termine di questo passaggio, una tabella nel file viene aggiornata utilizzando un'operazione di scrittura a settore singolo per indicare che i nuovi dati devono essere usati al posto del vecchio. I dati precedenti diventano spazio libero da usare all'operazione di commit successiva. Pertanto, i dati precedenti sono disponibili e possono essere ripristinati se si verifica un errore durante il commit delle modifiche. Se si specifica STGC_OVERWRITE, viene utilizzata una singola operazione di commit in fase. Per altre informazioni sui flag in modalità transacted, vedere 'enumerazione STGC.

IStorage::Revert

Rimuove tutte le modifiche apportate all'oggetto di archiviazione dall'ultima operazione di commit.

IStorage::EnumElements

Crea e recupera un puntatore a un oggetto enumeratore che può essere utilizzato per enumerare gli oggetti di archiviazione e flusso contenuti in questo oggetto di archiviazione. L'implementazione di file composta fornita da COM crea uno snapshot di tali informazioni. Di conseguenza, le modifiche ai flussi e alle risorse di archiviazione non vengono riflesse nell'enumeratore fino a quando non viene ottenuto un nuovo enumeratore.

IStorage::D estroyElement

Rimuove l'elemento specificato (sottostorage o flusso) da questo oggetto di archiviazione.

IStorage::RenameElement

Rinomina il sottostorage o il flusso specificato in questo oggetto di archiviazione. I caratteri da 000 a 01f, che fungono da primo carattere del nome di flusso/archiviazione, sono riservati per l'uso da OLE. Si tratta di una restrizione di file composta, non di una restrizione di archiviazione strutturata.

IStorage::SetElementTimes

Imposta i tempi di modifica, accesso e creazione dell'elemento di archiviazione specificato. L'implementazione di file composti fornita da COM mantiene i tempi di modifica e modifica per gli oggetti di archiviazione interni. Gli oggetti di archiviazione radice supportano qualsiasi elemento supportato dal file system sottostante (o da ILockBytes). L'implementazione di file composta non mantiene alcun timestamp per i flussi interni. I timestamp non supportati vengono segnalati come zero, che consente al chiamante di testare il supporto.

IStorage::SetClass

Assegna il CLSID specificato a questo oggetto di archiviazione.

IStorage::SetStateBits

Archivia fino a 32 bit di informazioni sullo stato in questo oggetto di archiviazione. Lo stato impostato da questo metodo è solo per uso esterno. L'implementazione di file composti fornita da COM non esegue alcuna azione in base allo stato.

IStorage::Stat

Recupera la strutturaSTATSTG per questo oggetto di archiviazione aperto.

Osservazioni

Se l'oggetto di archiviazione viene aperto in modalità semplice, l'uso dei metodi precedenti è limitato. Una risorsa di archiviazione è in modalità semplice se viene aperta con l'elemento STGM_SIMPLE specificato nella parametro grfMode del StgCreateStorageEx o funzione StgOpenStorageEx. Per altre informazioni sulle risorse di archiviazione in modalità semplice, vedere costanti STGM. Se l'oggetto di archiviazione in modalità semplice è stato ottenuto dalla funzione stgCreateStorageEx, è possibile chiamare il metodoCreateStreamma non è possibile chiamare il metodoOpenStream. Se l'oggetto di archiviazione in modalità semplice è stato ottenuto dalla funzione stgOpenStorageEx, è possibile chiamare il metodo OpenStream, ma non è possibile chiamare il metodo CreateStream.

Quando si usa un oggetto di archiviazione in modalità semplice per creare un flusso, le dimensioni minime di tale flusso in genere sono di 4096 byte. Se nel flusso sono scritti meno dati, la dimensione viene arrotondata fino a 4096 byte.

limiti di implementazione di file composti

IFillLockBytes

ILockBytes

IRootStorage

IStorage

IStream

StgCreateDocfile

StgCreateStorageEx

StgOpenStorage

StgOpenStorageEx