Partilhar via


Como antecipar condições de falta de espaço com armazenamento isolado

O código que usa armazenamento isolado é limitado por uma cota que especifica o tamanho máximo para o compartimento de dados no qual existem arquivos e diretórios de armazenamento isolados. A cota é definida pela política de segurança e pode ser configurada pelos administradores. Se o tamanho máximo permitido for excedido quando você tentar gravar dados, uma IsolatedStorageException exceção será lançada e a operação falhará. Isso ajuda a evitar ataques mal-intencionados de negação de serviço que podem fazer com que o aplicativo recuse solicitações porque o armazenamento de dados está preenchido.

Para ajudá-lo a determinar se uma determinada tentativa de gravação provavelmente falhará por esse motivo, a IsolatedStorage classe fornece três propriedades somente leitura: AvailableFreeSpace, UsedSizee Quota. Você pode usar essas propriedades para determinar se a gravação no repositório fará com que o tamanho máximo permitido do repositório seja excedido. Tenha em mente que o armazenamento isolado pode ser acessado simultaneamente; Portanto, quando você calcula a quantidade de armazenamento restante, o espaço de armazenamento pode ser consumido pelo tempo que você tenta gravar na loja. No entanto, você pode usar o tamanho máximo da loja para ajudar a determinar se o limite superior de armazenamento disponível está prestes a ser atingido.

A Quota propriedade depende de evidências da montagem para funcionar corretamente. Por esse motivo, você deve recuperar essa propriedade somente em IsolatedStorageFile objetos que foram criados usando o GetUserStoreForAssemblymétodo , GetUserStoreForDomainou GetStore . IsolatedStorageFile Objetos que foram criados de qualquer outra maneira (por exemplo, objetos que foram retornados do GetEnumerator método) não retornarão um tamanho máximo preciso.

Exemplo

O exemplo de código a seguir obtém um armazenamento isolado, cria alguns arquivos e recupera a AvailableFreeSpace propriedade. O espaço restante é relatado em bytes.

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