Interfaces de stockage structuré
Les services de stockage structuré sont organisés en trois catégories d’interfaces. Chaque jeu représente un niveau successif d’indirection ou d’abstraction entre un fichier composé, les objets qu’il contient et le support physique dans lequel ces composants individuels sont stockés.
La première catégorie d’interfaces se compose de IStorage, IStream et IRootStorage. Les deux premières interfaces définissent la façon dont les objets sont stockés dans un fichier composé. Ces interfaces fournissent des méthodes permettant d’ouvrir des éléments de stockage, de valider et de rétablir les modifications, de copier et de déplacer des éléments, ainsi que de lire et d’écrire des flux. Ces interfaces ne reconnaissent pas les formats de données natifs des objets individuels et n’ont donc aucune méthode pour enregistrer ces objets dans un stockage persistant. L’interface IRootStorage a une seule méthode pour associer un document composé à un nom de système de fichiers sous-jacent. Les clients doivent implémenter ces interfaces pour leurs fichiers composés.
La deuxième catégorie d’interfaces se compose des interfaces IPersist , que les objets implémentent pour gérer leurs données persistantes. Ces interfaces fournissent des méthodes permettant de lire les formats de données d’objets individuels et de savoir comment les stocker. Les objets sont responsables de l’implémentation de ces interfaces, car les clients ne connaissent pas les formats de données natifs de leurs objets imbriqués. Toutefois, ces interfaces n’ont aucune connaissance de supports de stockage physique spécifiques.
Une troisième catégorie se compose d’une interface unique, ILockBytes, qui fournit des méthodes pour écrire des fichiers sur des supports physiques spécifiques, tels qu’un disque dur ou un lecteur de bande. Toutefois, la plupart des applications n’implémentent pas l’interface ILockBytes , car COM fournit déjà des implémentations pour les deux situations les plus courantes, à dire l’implémentation basée sur les fichiers et l’implémentation basée sur la mémoire. L’objet de stockage de fichiers composés appelle les méthodes ILockBytes que vous ne les appelez pas directement dans l’implémentation.
Limites d’implémentation de fichiers composés
L’implémentation COM de l’architecture de stockage structuré est appelée fichiers composés. Les objets de stockage, tels qu’implémentés dans les fichiers composés, incluent une implémentation des interfaces IPropertyStorage et IPropertySetStorage .
Les pointeurs vers l’implémentation de fichiers composés de ces interfaces sont acquis en appelant la fonction StgCreateStorageEx pour créer un objet de fichier composé, ou StgOpenStorageEx pour ouvrir un fichier composé créé précédemment.
Une autre méthode pour acquérir un pointeur vers l’implémentation de fichiers composés de ces interfaces consiste à appeler la fonction StgCreateDocfile ou StgOpenStorage plus ancienne et plus limitée. Les quatre fonctions sont traitées comme des implémentations de fichiers composés.
L’implémentation du fichier composé peut être configurée pour utiliser des secteurs de 512 ou 4 096 octets, comme défini dans la structure STGOPTIONS .
L’implémentation de fichiers composés de fichiers composés est soumise aux contraintes d’implémentation suivantes.
Limite | Fichier composé |
---|---|
Limites de taille de fichier : | 512 : 2 gigaoctets (Go) 4096 : jusqu’aux limites du système de fichiers |
Taille maximale du tas requise pour les éléments ouverts : | 512 : 4 mégaoctets (Mo) 4096 : jusqu’aux limites de mémoire virtuelle |
La racine simultanée s’ouvre (ouvre le même fichier) : | Si STGM_READ et STGM_SHARE_DENY_WRITE sont spécifiés, les limites sont dictées par les limites du système de fichiers. Sinon, il existe une limite de 20 ouvertures racine simultanées du même fichier. |
Nombre d’éléments dans un fichier : | 512 : Illimité, mais les performances peuvent se dégrader si le nombre d’éléments dans les milliers 4096 : Illimité |
En raison de la limite de taille du tas de 4 Mo, le nombre d’éléments ouverts en mode transactionné est généralement limité à plusieurs milliers d’éléments.