Partager via


Anticipation des conditions d'espace insuffisant

Le code qui utilise le stockage isolé est limité par un quota qui spécifie la taille maximale du compartiment de données qui comprend les fichiers et les répertoires de stockage isolé. Cette valeur est définie par la stratégie de sécurité et peut être configurée par les administrateurs. Si la taille maximale autorisée est dépassée lors d'une tentative d'écriture de données, une IsolatedStorageException est levée et l'opération échoue. Ceci vous aide à éviter des attaques de refus de service malveillantes qui pourraient entraîner l'application à refuser des demandes, car le stockage des données est rempli. Pour vous aider à déterminer si une tentative d'écriture donnée peut échouer pour cette raison, le stockage isolé propose deux propriétés en lecture seule : IsolatedStorage.CurrentSize et IsolatedStorage.MaximumSize. Ces deux propriétés peuvent être utilisées pour déterminer si l'écriture dans le magasin peut entraîner le dépassement de la taille maximale autorisée du magasin. Lorsque vous utilisez ces propriétés, souvenez-vous que le stockage isolé est accessible simultanément ; ainsi, si vous calculez l'espace de stockage restant, il se peut que l'espace de stockage soit consommé lorsque vous tentez d'écrire dans le magasin. Toutefois, ceci ne vous empêche pas d'utiliser la taille maximale du magasin pour vous aider à déterminer si la limite supérieure du stockage disponible va être atteinte.

Une autre considération importante est que la propriété de taille maximale dépend de la preuve selon laquelle l'assembly fonctionne correctement. Par conséquent, cette méthode doit uniquement être appelée sur des objets IsolatedStorageFile créés à l'aide de GetUserStoreForAssembly(), GetUserStoreForDomain() ou GetStore(). Les objets IsolatedStorageFile créés d'une autre façon (par exemple, retournés par GetEnumerator()) retourneront une taille maximale incorrecte.

AnticipatingOutOfSpaceConditions, exemple

L'exemple de code suivant obtient un magasin isolé, crée quelques fichiers et mesure l'espace restant dans le magasin. L'espace restant est calculé en octets.

Imports System
Imports System.IO
Imports System.IO.IsolatedStorage

Public Module modmain

   Sub Main()

      ' Get an isolated store for user, domain, and assembly and put it into 
      ' an IsolatedStorageFile object.

      Dim isoStore As IsolatedStorageFile
      isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, Nothing, Nothing)

      ' Create a few placeholder files in the isolated store.

      Dim aStream As New IsolatedStorageFileStream("InTheRoot.txt", FileMode.Create, isoStore)
      Dim bStream As New IsolatedStorageFileStream("Another.txt", FileMode.Create, isoStore)
      Dim cStream As New IsolatedStorageFileStream("AThird.txt", FileMode.Create, isoStore)
      Dim dStream As New IsolatedStorageFileStream("AFourth.txt", FileMode.Create, isoStore)
      Dim eStream As New IsolatedStorageFileStream("AFifth.txt", FileMode.Create, isoStore)

      ' Use the CurrentSize and MaximumSize methods to find remaining
      ' space.
      ' Cast that number into a long type and put it into a variable.

      Dim spaceLeft As Long
      spaceLeft = CLng((isoStore.MaximumSize.ToString) - isoStore.CurrentSize.ToString)

      Console.WriteLine("CurrentSize: " + isoStore.CurrentSize.ToString)

      Console.WriteLine("Space Left: " + spaceLeft.ToString + " (might be very large if no quota is set)")

   End Sub
End Module
using System;
using System.IO;
using System.IO.IsolatedStorage;

public class CheckingSpace{

   public static void Main(){

      // Get an isolated store for this assembly and put it into an
      // IsolatedStoreFile object.

      IsolatedStorageFile isoStore =  IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

      // Create a few placeholder files in the isolated store.

      new IsolatedStorageFileStream("InTheRoot.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("Another.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("AThird.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("AFourth.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("AFifth.txt", FileMode.Create, isoStore);

      // Use the CurrentSize and MaximumSize methods to find remaining 
      // space.
      // Cast that number into a long type and put it into a variable.
      long spaceLeft =(long)(isoStore.MaximumSize - isoStore.CurrentSize);

      Console.WriteLine(spaceLeft+ " bytes of space remain in this isolated store.");
      
   }// End of Main.

}

Voir aussi

Référence

IsolatedStorageFile

Concepts

Obtention de magasins

Autres ressources

Exécution de tâches de stockage isolé