Partager via


Comment : anticiper des conditions d'espace insuffisant avec le stockage isolé

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 exception IsolatedStorageException est levée et l'opération échoue. Ceci vous aide à éviter des attaques par déni 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, la classe IsolatedStorage propose trois propriétés en lecture seule : AvailableFreeSpace, UsedSize, and Quota. Ces 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é IsolatedStorage.Quota dépend de la preuve selon laquelle l'assembly fonctionne correctement. Par conséquent, cette propriété doit uniquement être récupérée sur des objets IsolatedStorageFile ayant été créés à l'aide de la méthode GetUserStoreForAssembly, GetUserStoreForDomain, ou GetStore. Les objets IsolatedStorageFile ayant été créés d'une autre façon (par exemple, les objets ayant été retournés par la méthode GetEnumerator) retourneront une taille maximale incorrecte.

Exemple

L'exemple de code suivant obtient un magasin isolé, crée des fichiers et récupère la propriété AvailableFreeSpace. L'espace restant est calculé en octets.

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

Public Class CheckingSpace
    Public Shared Sub Main()
        ' Get an isolated store for this assembly and put it into an
        ' IsolatedStoreFile object.
        Dim isoStore As IsolatedStorageFile = _
            IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
            IsolatedStorageScope.Assembly, 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)

        Console.WriteLine(isoStore.AvailableFreeSpace + " bytes of space remain in this isolated store.")
    End Sub ' End of Main.
End Class
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);

        Console.WriteLine(isoStore.AvailableFreeSpace + " bytes of space remain in this isolated store.");
    } // End of Main.
}
using namespace System;
using namespace System::IO;
using namespace System::IO::IsolatedStorage;

public ref 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, (Type ^)nullptr, (Type ^)nullptr);

        // Create a few placeholder files in the isolated store.
        gcnew IsolatedStorageFileStream("InTheRoot.txt", FileMode::Create, isoStore);
        gcnew IsolatedStorageFileStream("Another.txt", FileMode::Create, isoStore);
        gcnew IsolatedStorageFileStream("AThird.txt", FileMode::Create, isoStore);
        gcnew IsolatedStorageFileStream("AFourth.txt", FileMode::Create, isoStore);
        gcnew IsolatedStorageFileStream("AFifth.txt", FileMode::Create, isoStore);

        Console::WriteLine(isoStore->AvailableFreeSpace + " bytes of space remain in this isolated store.");
    } // End of Main.
};

int main()
{
    CheckingSpace::Main();
}

Voir aussi

Référence

IsolatedStorageFile

Concepts

Stockage isolé

Obtention de magasins

Historique des modifications

Date

Historique

Motif

Décembre 2010

AJout d'informations sur la propriété AvailableFreeSpace.

Améliorations apportées aux informations.