Condividi tramite


Procedura: anticipare le condizioni di spazio insufficiente con lo spazio di memorizzazione isolato

Il codice in cui viene utilizzata l'archiviazione isolata è vincolato da una quota che specifica la dimensione massima del contesto dati in cui sono presenti le directory e i file di archiviazione isolata. Questo valore è definito dai criteri di sicurezza e può essere configurato dagli amministratori. Se durante un tentativo di scrittura di dati si supera la dimensione massima consentita, verrà generata un'eccezione IsolatedStorageException e l'operazione non viene completata. Le quote contribuiscono ad arginare il rischio di attacchi Denial of Service che potrebbero condurre l'applicazione a rifiutare le richieste per esaurimento dello spazio di archiviazione dati. Per permettere di stabilire se è probabile che un determinato tentativo di scrittura non riesca per il motivo suddetto, la classe IsolatedStorage fornisce tre proprietà in sola lettura: AvailableFreeSpace, UsedSize e Quota. Queste proprietà possono essere utilizzate per determinare se scrivendo nell'archivio si supererà la dimensione massima consentita dello stesso. Quando si utilizzano queste proprietà, è importante considerare che l'archiviazione isolata consente più accessi contemporanei, pertanto, anche se si calcola lo spazio di archiviazione rimanente, è possibile che questo non sia più disponibile al momento in cui si tenta di scrivere nell'archivio. Non viene tuttavia così impedito l'utilizzo della dimensione massima dell'archivio per determinare se si sta per raggiungere il limite massimo di archiviazione disponibile.

Un'altra considerazione importante è che il corretto funzionamento della proprietà IsolatedStorage.Quota dipende dall'evidenza dell'assembly. Di conseguenza, questa proprietà deve essere recuperata solo negli oggetti IsolatedStorageFile che sono stati creati utilizzando il metodo GetUserStoreForAssembly, GetUserStoreForDomain o GetStore. Gli oggetti IsolatedStorageFile creati in altro modo, ad esempio gli oggetti restituiti dal metodo GetEnumerator, non restituiranno una dimensione massima precisa.

Esempio

Nell'esempio di codice che segue viene ottenuto un archivio isolato, vengono creati alcuni file e viene recuperata la proprietà AvailableFreeSpace. Lo spazio rimanente viene indicato in byte.

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();
}

Vedere anche

Riferimenti

IsolatedStorageFile

Concetti

Spazio di memorizzazione isolato

Procedura: recuperare archivi per lo spazio di memorizzazione isolato

Cronologia delle modifiche

Data

Cronologia

Motivo

Dicembre 2010

Sono state aggiunte informazioni sulla proprietà AvailableFreeSpace.

Miglioramento delle informazioni.