Passer au contenu principal
Steam permet le stockage cloud de deux manières. Vous pouvez effectuer toutes vos lectures et écritures à l’aide des méthodes de l’API ISteamRemoteStorage, qui écrivent les fichiers dans le dossier de stockage du jeu sur le disque dur local et les synchronisent avec le cloud. Vous pouvez également effectuer toutes vos lectures et écritures directement dans le système de fichiers de l’ordinateur, puis utiliser Steam Auto-Cloud pour synchroniser avec le cloud le dossier local contenant les données du jeu. Le Microsoft Game Development Kit (GDK) prend en charge les deux approches :
Les sauvegardes cloud sans code ne sont pas prises en charge sur les consoles XBOX ni sur XBOX Cloud Gaming. Si votre titre cible la console ou le cloud en plus du PC Windows, utilisez plutôt le wrapper XGameSave ou l’API XGameSave complète.
Le wrapper basé sur le code est la solution recommandée pour les titres publiés sur console ou dans le cloud. Il correspond étroitement à l’écriture de fichiers en local ou à l’utilisation de l’API Steam Remote Storage. Cette rubrique se concentre sur le wrapper simplifié.
L’API XGameSave complète, sans wrapper, offre plus de fonctionnalités et de flexibilité que le wrapper simple. Si vous avez besoin de l’une de ces fonctionnalités, n’utilisez pas le wrapper. Les jeux ne doivent pas passer de l’un à l’autre ni mélanger les appels d’API des deux. Pour plus d’informations sur l’API XGameSave, consultez Sauvegardes de jeu.
Les exemples de code suivants montrent le fonctionnement des opérations de fichier de base dans le SDK Steamworks et dans le Microsoft Game Development Kit (GDK), ainsi que certaines différences subtiles entre les deux API.

Comparaison des opérations de fichier

Les exemples de code suivants montrent comment effectuer des opérations de fichier de base avec l’API Steamworks Remote Storage et son équivalent dans le GDK. Ils supposent que la variable provider contient un pointeur vers un objet Microsoft::Xbox::Wrappers::GameSave::Provider initialisé. Si vous n’utilisez pas l’API Steam Remote Storage mais avez plutôt opté pour Steam Auto-Cloud, remplacez les appels à l’API Remote Storage par leurs équivalents de l’API du système de fichiers.

Lecture d’un fichier

Steamworks

ou

GDK

Documentation de référence

Microsoft.Xbox.Wrappers.XGameSave.Provider.Load

Écriture d’un fichier

Steamworks

ou

GDK

Documentation de référence

Microsoft.Xbox.Wrappers.XGameSave.Provider.Save

Supprimer un fichier

Sur Steam, vous pouvez soit supprimer un fichier dans le cloud tout en conservant la copie locale (FileForget), soit supprimer un fichier aux deux emplacements (FileDelete). L’API du wrapper XGameSave n’a pas d’équivalent à FileForget. Sa fonction Delete fonctionne comme FileDelete dans Steamworks.

Steamworks

ou

GDK

ou
ou

Documentation de référence

Obtenir tous les fichiers

Steamworks

GDK

Documentation de référence

Vérifier l’espace disponible

Dans les exemples suivants, totalBytes correspond à la quantité d’espace attribuée à votre jeu chez le fournisseur de stockage cloud. availableBytes correspond à la quantité d’espace libre restante (c’est-à-dire availableBytes = totalBytes – bytesUsed).

Steamworks

GDK

Documentation de référence

Microsoft.Xbox.Wrappers.XGameSave.Provider.GetQuota

Différences terminologiques

Sur Steam, les données de stockage distant sont gérées sous forme de fichiers, qui fonctionnent comme des fichiers sur un disque dur local. Pour lire ou écrire, vous spécifiez le fichier, puis vous obtenez ou définissez les octets qu’il contient. Dans le Microsoft Game Development Kit (GDK), l’équivalent des fichiers Steam sont les blobs. Les blobs sont regroupés dans une structure appelée conteneur. Un conteneur est un groupe nommé de blobs. Par exemple, vous pouvez utiliser des conteneurs pour prendre en charge plusieurs emplacements de sauvegarde par utilisateur, avec les mêmes noms de fichiers dans chaque emplacement. Si vous n’avez pas besoin de la couche d’organisation supplémentaire qu’offrent les conteneurs, placez tous vos blobs (fichiers) dans le même conteneur.
Les noms de conteneurs ne peuvent pas contenir d’espaces. Toute tentative d’accès à un conteneur ou de création d’un conteneur dont le nom contient un espace entraîne le renvoi par la méthode du fournisseur d’un HRESULT 0x80830001 : le volume spécifié ne prend pas en charge les niveaux de stockage.

Limites de stockage

Le Microsoft Game Development Kit (GDK) impose une taille maximale d’écriture de blob ou de fichier et une limite de stockage globale inférieures à celles de Steam. Sur Steam, chaque opération d’écriture de fichier est limitée à 100 mébioctets (Mio), et chaque fichier ne peut pas dépasser 200 Mio. En revanche, l’API XGameSave et son wrapper limitent chaque blob à 16 Mo et autorisent un maximum de 256 Mo par utilisateur et par jeu. Si vous devez stocker plus de 16 Mo de données dans un blob, répartissez les données sur plusieurs blobs. Implémentez ensuite une fonction de lecture et d’écriture séquentielle pour traiter les données un blob à la fois.

Les fonctions du wrapper sont bloquantes

L’interface ISteamRemoteStorage propose deux versions des fonctions de lecture et d’écriture : FileRead et FileWrite, ainsi que FileReadAsync et FileWriteAsync. Les versions Async effectuent un rappel une fois le fichier lu ou écrit. Les fonctions du wrapper XGameSave simplifié ne proposent pas de versions asynchrones de ses équivalents de FileRead et FileWrite. Provider::Load et Provider::Save sont toutes deux bloquantes ; tenez compte de ce comportement lorsque vous les utilisez dans votre jeu. Pour cette raison, Provider::Initialize lève une exception si vous l’appelez depuis le thread d’interface utilisateur.

Initialisation

Incluez le fichier d’en-tête du wrapper dans la solution de votre jeu avant d’utiliser l’une des méthodes du wrapper. Il se trouve dans %GRDKLatest%\GameKit\Include\xgamesavewrappers.hpp. Avant d’utiliser les méthodes du wrapper XGameSave, créez une instance de la classe Provider et appelez la méthode Provider::Initialize. Conservez un pointeur vers l’instance Provider pendant toute la durée de vie de votre jeu. Appelez Provider::Initialize depuis un thread autre que le thread d’interface utilisateur. La méthode lève une exception si vous l’appelez depuis le thread d’interface utilisateur. Pour initialiser le fournisseur du wrapper, vous avez besoin d’un XUserHandle pour l’utilisateur actuel et de l’identificateur de configuration de service (SCID) de votre jeu.

Documentation de référence

Microsoft.Xbox.Wrappers.XGameSave.Provider.Initialize
Dernière modification le 6 octobre 2026