> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XGameSaveSubmitUpdate

> XGameSaveSubmitUpdate

# XGameSaveSubmitUpdate

Soumet une mise à jour au service XGameSave. Met à jour les blobs d'un conteneur.

## Syntaxe

```cpp theme={null}
HRESULT XGameSaveSubmitUpdate(  
         XGameSaveUpdateHandle updateContext  
)  
```

### Paramètres

*updateContext*   \_In\_\
Type : XGameSaveUpdateHandle

Handle vers le XGameSaveUpdate à mettre à jour.

### Valeur de retour

Type : HRESULT

Résultat de la fonction.

Erreurs courantes

* E\_GS\_INVALID\_CONTAINER\_NAME
* E\_GS\_OUT\_OF\_LOCAL\_STORAGE
* E\_GS\_UPDATE\_TOO\_BIG
* E\_GS\_QUOTA\_EXCEEDED
* E\_GS\_CONTAINER\_NOT\_IN\_SYNC
* E\_GS\_CONTAINER\_SYNC\_FAILED
* E\_GS\_HANDLE\_EXPIRED

## Remarques

<Note>Il n'est pas sûr d'appeler cette fonction sur un thread sensible au temps. Pour plus d'informations, consultez [Threads sensibles au temps](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads).</Note>

Vous devez avoir appelé avec succès [XGameSaveCreateUpdate](/fr/reference/system/xgamesave/functions/xgamesavecreateupdate) avant d'effectuer cet appel.

La partie stockage de cette API est conçue pour transférer facilement les données du jeu vers un stockage persistant de manière sûre, fiable et transactionnelle. Nous voulons garantir que les données sous-jacentes d'un conteneur restent toujours cohérentes ; c'est pourquoi l'opération entière doit réussir ou échouer de manière atomique. Nous ne voulons pas de mise à jour partielle dans laquelle certaines données de blob seraient incohérentes avec d'autres données du conteneur. Pour ce faire, nous fournissons un contexte de mise à jour auquel les écritures et suppressions de blobs sont soumises, puis, lorsqu'il est prêt, le contexte entier est soumis. En pratique, cela se présente comme suit :

Un XGameSaveUpdate est rempli d'actions d'écriture (Write) et de suppression (Delete) à effectuer sur les blobs du conteneur au moyen de [XGameSaveSubmitBlobWrite](/fr/reference/system/xgamesave/functions/xgamesavesubmitblobwrite) et [XGameSaveSubmitBlobDelete](/fr/reference/system/xgamesave/functions/xgamesavesubmitblobdelete). Une mise à jour est finalisée en appelant [XGameSaveSubmitUpdate](/fr/reference/system/xgamesave/functions/xgamesavesubmitupdate).

Lorsque vous avez terminé avec un **XGameSaveUpdate**, fermez-le à l'aide de la méthode [XGameSaveCloseUpdate](/fr/reference/system/xgamesave/functions/xgamesavecloseupdate).

L'exemple C++ suivant illustre une mise à jour XGameSave synchrone.

```cpp theme={null}
// SYNC Write - should not be called on a time sensitive thread 
//              as this will block until the operation is complete 
void Sample::_SaveDataSync(const char* containerName, const char* containerDisplayName) 
{ 
    HRESULT hr; 
    XGameSaveContainerHandle containerContext; 
    XGameSaveUpdateHandle updateContext; 
  
    hr = XGameSaveCreateContainer(_provider, containerName, &containerContext); 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveCreateUpdate(containerContext, containerDisplayName, &updateContext); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(updateContext, "WorldState", _worldState.data(), _worldState.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(updateContext, "PlayerState", _playerState.data(), _playerState.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitBlobWrite(updateContext, "PlayerInventory", _playerInventory.data(), _playerInventory.size()); 
    } 
    if (SUCCEEDED(hr)) 
    { 
        if (_clearLevelProgress) 
        { 
            hr = XGameSaveSubmitBlobDelete(updateContext, "LevelProgress"); 
        } 
    } 
  
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveSubmitUpdate(updateContext); 
    } 
  
    if (updateContext) 
    { 
        XGameSaveCloseUpdate(updateContext); 
    } 
    if (containerContext) 
    { 
        XGameSaveCloseContainer(containerContext); 
    } 
  
    _HandleContainerUpdateErrors(hr); 
} 
  
  
void Sample::_HandleContainerUpdateErrors(HRESULT hr) 
{ 
    switch (hr) 
    { 
    case E_GS_INVALID_CONTAINER_NAME: 
        // tried to access a container with an invalid name 
        break; 
    case E_GS_OUT_OF_LOCAL_STORAGE: 
        // storage location is full, let the user know that saves won't work till this is fixed 
        break; 
    case E_GS_UPDATE_TOO_BIG: 
        // the blob that we provided was too big, can't be larger than GS_MAX_BLOB_SIZE 
        break; 
    case E_GS_QUOTA_EXCEEDED: 
        // the update we did was larger than our overall quota, need to track that! (see XGameSaveQueryRemainingQuota & XGameSaveQueryRemainingQuotaAsync) 
        break; 
    case E_GS_CONTAINER_NOT_IN_SYNC: 
    case E_GS_CONTAINER_SYNC_FAILED: 
        // need to sync and we are offline ? 
        break; 
    case E_GS_HANDLE_EXPIRED: 
        // need to re-initialize since another device has taken 
        // ownership while we were suspended and/or busy 
        break; 
    } 
} 
```

## Configuration requise

**En-tête :** XGameSave.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, consoles de la famille XBOX One et consoles XBOX Series

## Documentation conceptuelle

* [Débogage des sauvegardes de jeu](/fr/build/core-features/common/game-save/game-saves-debugging)
* [Threads sensibles au temps](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Voir aussi

[XGameSave](/fr/reference/system/xgamesave/xgamesave_members)\
[XGameSaveCreateUpdate](/fr/reference/system/xgamesave/functions/xgamesavecreateupdate)\
[XGameSaveSubmitBlobWrite](/fr/reference/system/xgamesave/functions/xgamesavesubmitblobwrite)\
[XGameSaveSubmitBlobDelete](/fr/reference/system/xgamesave/functions/xgamesavesubmitblobdelete)\
[XGameSaveCloseUpdate](/fr/reference/system/xgamesave/functions/xgamesavecloseupdate)
[Débogage des sauvegardes de jeu](/fr/build/core-features/common/game-save/game-saves-debugging)


## Related topics

- [XGameSaveSubmitUpdate](/reference/system/xgamesave/functions/xgamesavesubmitupdate.md)
- [XGameSaveCreateUpdate](/reference/system/xgamesave/functions/xgamesavecreateupdate.md)
- [XGameSaveSubmitBlobDelete](/reference/system/xgamesave/functions/xgamesavesubmitblobdelete.md)
- [XGameSaveSubmitBlobWrite](/reference/system/xgamesave/functions/xgamesavesubmitblobwrite.md)
- [XGameSaveSubmitUpdateAsync](/reference/system/xgamesave/functions/xgamesavesubmitupdateasync.md)
