Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
-
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.
-
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.
-
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.
-
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.
-
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.
-
Kopiuje lub przenosi podsektoraż lub strumień z tego obiektu magazynu do innego obiektu magazynu.
-
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.
-
Odrzuca wszystkie zmiany wprowadzone w obiekcie magazynu od ostatniej operacji zatwierdzania.
-
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.
-
Usuwa określony element (podstorage lub strumień) z tego obiektu magazynu.
-
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.
-
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ę.
-
Przypisuje określony identyfikator CLSID do tego obiektu magazynu.
-
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.
-
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.
Tematy pokrewne