Compartir a través de


Procedimiento para prever condiciones de espacio insuficiente con almacenamiento aislado

El código que usa el almacenamiento aislado está restringido por una cuota que especifica el tamaño máximo del compartimiento de datos en el que existen archivos de almacenamiento aislados y directorios. La cuota se define mediante la directiva de seguridad y es configurable por los administradores. Si se supera el tamaño máximo permitido al intentar escribir datos, se produce una IsolatedStorageException excepción y se produce un error en la operación. Esto ayuda a evitar ataques malintencionados por denegación de servicio que podrían hacer que la aplicación rechace las solicitudes porque se rellena el almacenamiento de datos.

Para ayudarle a determinar si es probable que se produzca un error en un intento de escritura determinado por este motivo, la IsolatedStorage clase proporciona tres propiedades de solo lectura: AvailableFreeSpace, UsedSizey Quota. Puede usar estas propiedades para determinar si escribir en la tienda hará que se supere el tamaño máximo permitido de la tienda. Tenga en cuenta que se puede acceder al almacenamiento aislado simultáneamente; por lo tanto, cuando calcule la cantidad de almacenamiento restante, es posible que el espacio se haya consumido para cuando intente escribir en el almacén. Sin embargo, puede usar el tamaño máximo del almacén para ayudar a determinar si el límite superior del almacenamiento disponible está a punto de alcanzarse.

La Quota propiedad depende de la evidencia del ensamblado para que funcione correctamente. Por este motivo, debe recuperar esta propiedad solo en los objetos IsolatedStorageFile creados mediante el método GetUserStoreForAssembly, GetUserStoreForDomain o GetStore. IsolatedStorageFile Los objetos que se crearon de cualquier otra manera (por ejemplo, los objetos que se devolvieron desde el GetEnumerator método) no devolverán un tamaño máximo preciso.

Ejemplo

En el ejemplo de código siguiente se obtiene un almacén aislado, se crean algunos archivos y se recupera la AvailableFreeSpace propiedad . El espacio restante se notifica en bytes.

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.
}
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 Class

Consulte también