Udostępnij przez


implementacja plików IStorage-Compound

Implementacja pliku złożonego IStorage umożliwia tworzenie podstorażów i strumieni w obiekcie magazynu znajdujących się w obiekcie pliku złożonego i zarządzania nimi. Aby utworzyć obiekt pliku złożonego i uzyskać wskaźnik IStorage, wywołaj funkcję interfejsu API StgCreateStorageEx. Aby otworzyć istniejący obiekt pliku złożonego i pobrać jego główny wskaźnik IStorage, wywołaj StgOpenStorageEx.

Aplikacje korzystające z magazynu złożonego powinny być zarejestrowane w HKEY_CLASSES_ROOT\SystemFileAssociations i powinny udostępniać własne programy obsługi właściwości. Aby uzyskać więcej informacji, zobacz sekcję "Registering Verbs and Other File Association Information" (Rejestrowanie czasowników i inne informacje o skojarzeniu plików) Application Registration.

Kiedy należy używać

Większość aplikacji używa tej implementacji do tworzenia magazynów i strumieni oraz zarządzania nimi.

Metody

IStorage::CreateStream

Tworzy i otwiera obiekt strumienia o określonej nazwie zawartej w tym obiekcie magazynu. Nazwa nie może przekraczać 31 znaków (w tym terminator ciągu). Znaki od 000 do 01f, pełniące rolę pierwszego znaku nazwy strumienia/magazynu, są zarezerwowane do użytku przez OLE. Jest to ograniczenie pliku złożonego, a nie ograniczenie magazynu strukturalnego. Implementacja pliku złożonego dostarczonego przez com IStorage::CreateStream nie obsługuje następujących zachowań:

  • Flaga STGM_DELETEONRELEASE nie jest obsługiwana.
  • Tryb transaktoryzowany (STGM_TRANSACTED) nie jest obsługiwany dla obiektów strumienia.
  • Otwieranie tego samego strumienia więcej niż raz z tego samego magazynu nie jest obsługiwane. Flaga trybu udostępniania STGM_SHARE_EXCLUSIVE musi być określona w parametrze grfMode.

IStorage::OpenStream

Otwiera istniejący obiekt strumienia w tym obiekcie magazynu przy użyciu trybów dostępu określonych w parametrze grfMode. Znaki od 000 do 01f, pełniące rolę pierwszego znaku nazwy strumienia/magazynu, są zarezerwowane do użytku przez OLE. Jest to ograniczenie pliku złożonego, a nie ograniczenie magazynu strukturalnego. Implementacja pliku złożonego dostarczonego przez com IStorage::OpenStream metoda nie obsługuje następującego zachowania:

  • Flaga STGM_DELETEONRELEASE.
  • Tryb transacted (STGM_TRANSACTED) dla obiektów strumienia.
  • Otwieranie tego samego strumienia więcej niż raz z tego samego magazynu. Należy określić flagę STGM_SHARE_EXCLUSIVE.

IStorage::CreateStorage

Tworzy i otwiera nowy obiekt magazynu o określonej nazwie w określonym trybie dostępu. Nazwa nie może przekraczać 31 znaków (w tym terminator ciągu). Znaki od 000 do 01f, pełniące rolę pierwszego znaku nazwy strumienia/magazynu, są zarezerwowane do użytku przez OLE. Jest to ograniczenie pliku złożonego, a nie ograniczenie magazynu strukturalnego. Implementacja pliku złożonego dostarczonego przez com IStorage::CreateStorage metoda nie obsługuje następującego zachowania:

  • Flaga STGM_PRIORITY dla magazynów innych niżroot.
  • Otwieranie tego samego obiektu magazynu więcej niż raz z tego samego magazynu nadrzędnego. Należy określić flagę STGM_SHARE_EXCLUSIVE.
  • Flaga STGM_DELETEONRELEASE. Jeśli ta flaga jest określona, funkcja zwraca STG_E_INVALIDFLAG.

IStorage::OpenStorage

Otwiera istniejący obiekt magazynu o określonej nazwie w określonym trybie dostępu. Znaki od 000 do 01f, pełniące rolę pierwszego znaku nazwy strumienia/magazynu, są zarezerwowane do użytku przez OLE. Jest to ograniczenie pliku złożonego, a nie ograniczenie magazynu strukturalnego. Implementacja pliku złożonego dostarczonego przez com IStorage::OpenStorage metoda nie obsługuje następującego zachowania:

  • Flaga STGM_PRIORITY dla magazynów innych niżroot.
  • Otwieranie tego samego obiektu magazynu więcej niż raz z tego samego magazynu nadrzędnego. Należy określić flagę STGM_SHARE_EXCLUSIVE.
  • Flaga STGM_DELETEONRELEASE. Jeśli ta flaga jest określona, funkcja zwraca STG_E_INVALIDFUNCTION.

IStorage::CopyTo

Kopiuje tylko podsektory i strumienie tego otwartego obiektu magazynu do innego obiektu magazynu. Parametr rgiidExclude można ustawić na IID_IStream skopiować tylko podstorages lub IID_IStorage skopiować tylko strumienie.

IStorage::MoveElementTo

Kopiuje lub przenosi podsektoraż lub strumień z tego obiektu magazynu do innego obiektu magazynu.

IStorage::Commit

Gwarantuje, że wszystkie zmiany wprowadzone w obiekcie magazynu otwarte w trybie transakcji zostaną odzwierciedlone w magazynie nadrzędnym; w przypadku magazynu głównego odzwierciedla zmiany w rzeczywistym urządzeniu; na przykład plik na dysku. W przypadku głównego obiektu magazynu otwartego w trybie bezpośrednim ta metoda nie ma żadnego wpływu, z wyjątkiem opróżniania wszystkich pamięci na dysk. W przypadku obiektów magazynu niezwiązanych z katalogiem głównym w trybie bezpośrednim ta metoda nie ma wpływu.

Implementacja plików złożonych udostępnionych com używa dwufazowego procesu zatwierdzania, chyba że STGC_OVERWRITE jest określony w grfCommitFlags parametru. Ten dwufazowy proces zapewnia niezawodność danych w przypadku niepowodzenia operacji zatwierdzania. Najpierw wszystkie nowe dane są zapisywane w nieużywanym miejscu w pliku bazowym. W razie potrzeby do pliku zostanie przydzielone nowe miejsce. Po zakończeniu tego kroku tabela w pliku zostanie zaktualizowana przy użyciu operacji zapisu z jednym sektorem, aby wskazać, że nowe dane mają być używane zamiast starego. Stare dane stają się wolne miejsce do użycia podczas następnej operacji zatwierdzania. W związku z tym stare dane są dostępne i można je przywrócić w przypadku wystąpienia błędu podczas zatwierdzania zmian. Jeśli STGC_OVERWRITE zostanie określona, zostanie użyta operacja zatwierdzania pojedynczego etapu. Aby uzyskać więcej informacji na temat flag trybu transacted, zobacz wyliczenie STGC.

IStorage::Przywróć

Odrzuca wszystkie zmiany wprowadzone w obiekcie magazynu od ostatniej operacji zatwierdzania.

IStorage::EnumElements

Tworzy i pobiera wskaźnik do obiektu wyliczającego, który może służyć do wyliczania obiektów magazynu i strumienia zawartych w tym obiekcie magazynu. Implementacja pliku złożonego dostarczonego przez com tworzy migawkę tych informacji. W związku z tym zmiany w strumieniach i magazynach nie są odzwierciedlane w module wyliczania do momentu uzyskania nowego modułu wyliczającego.

IStorage::D estroyElement

Usuwa określony element (podstorage lub strumień) z tego obiektu magazynu.

IStorage::RenameElement

Zmienia nazwę określonego podstorage lub strumienia w tym obiekcie magazynu. Znaki od 000 do 01f, pełniące rolę pierwszego znaku nazwy strumienia/magazynu, są zarezerwowane do użytku przez OLE. Jest to ograniczenie pliku złożonego, a nie ograniczenie magazynu strukturalnego.

IStorage::SetElementTimes

Ustawia czas modyfikacji, dostępu i tworzenia określonego elementu magazynu. Implementacja pliku złożonego dostarczonego przez com zachowuje czas modyfikacji i zmian dla wewnętrznych obiektów magazynu. Główne obiekty magazynu obsługują dowolne elementy obsługiwane przez podstawowy system plików (lub przez ILockBytes). Implementacja pliku złożonego nie przechowuje żadnych sygnatur czasowych dla strumieni wewnętrznych. Nieobsługiwane sygnatury czasowe są zgłaszane jako zero, dzięki czemu obiekt wywołujący może przetestować obsługę.

IStorage::SetClass

Przypisuje określony identyfikator CLSID do tego obiektu magazynu.

IStorage::SetStateBits

Przechowuje do 32 bitów informacji o stanie w tym obiekcie magazynu. Stan ustawiony przez tę metodę jest przeznaczony tylko do użytku zewnętrznego. Implementacja pliku złożonego dostarczonego przez com nie wykonuje żadnej akcji na podstawie stanu.

IStorage::Stat

Pobiera strukturę STATSTG dla tego otwartego obiektu magazynu.

Uwagi

Jeśli obiekt magazynu jest otwarty w trybie prostym, użycie powyższych metod jest ograniczone. Magazyn jest w trybie prostym, jeśli jest otwarty z elementem STGM_SIMPLE określonym w grfMode parametru StgCreateStorageEx lub StgOpenStorageEx. Aby uzyskać więcej informacji na temat magazynów w trybie prostym, zobacz stałe STGM. Jeśli obiekt magazynu w trybie prostym został uzyskany z funkcji StgCreateStorageEx, można wywołać metodę CreateStream, ale nie można wywołać metody OpenStream. Jeśli obiekt magazynu trybu prostego został uzyskany z funkcji StgOpenStorageEx, można wywołać metodę OpenStream, ale nie można wywołać metody CreateStream.

Gdy obiekt magazynu w trybie prostym jest używany do tworzenia strumienia, minimalny rozmiar tego strumienia to zazwyczaj 4096 bajtów. Jeśli do strumienia jest zapisywana mniej danych, rozmiar jest zaokrąglany do 4096 bajtów.

limity implementacji plików złożonych

IFillLockBytes

ILockBytes

IRootStorage

IStorage

IStream

StgCreateDocfile

StgCreateStorageEx

StgOpenStorage

StgOpenStorageEx