Partilhar via


Como: Prevê condições de falta de espaço com o armazenamento isolado

O código que usa armazenamento isolado é restrito por um quota que especifica o tamanho máximo para o compartimento de dados no qual arquivos e diretórios de armazenamento isolado existem. Esse valor é definido pela diretiva de segurança e é configurável por administradores. Se o tamanho máximo permitido for excedido quando é feita uma tentativa para gravar dados, um IsolatedStorageException é lançado e a operação falhará. Isso ajuda a impedir ataques de negação de serviço que podem fazer com que o aplicativo recusar solicitações porque o armazenamento de dados é preenchido. Para ajudá-lo a determinar se uma tentativa de gravação determinado é a possibilidade de falha por esse motivo, o IsolatedStorage classe fornece três propriedades somente leitura: AvailableFreeSpace, UsedSize, and Quota. Essas propriedades podem ser usadas para determinar se a escrita para o armazenamento fará com que o tamanho máximo permitido do armazenamento seja excedido. Ao usar essas propriedades, tenha em mente que o armazenamento isolado pode ser acessado simultaneamente; portanto, se você calcular a quantidade de armazenamento restante, o espaço de armazenamento pode ser consumido até o momento em que você tentar gravar no armazenamento. No entanto, isso não impede que você use o tamanho máximo do armazenamento para ajudar a determinar se o limite superior no armazenamento disponível está prestes a ser alcançado.

Outra consideração importante é que o IsolatedStorage.Quota propriedade depende de evidências do assembly funcione adequadamente. Como resultado, esta propriedade deve ser recuperada somente em IsolatedStorageFile os objetos que foram criados usando o GetUserStoreForAssembly, GetUserStoreForDomain, ou GetStore método. IsolatedStorageFileobjetos que foram criados de qualquer outra forma (como, por exemplo, objetos que foram retornados a partir do GetEnumerator método) não retornará um tamanho máximo precisas.

Exemplo

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

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

Consulte também

Referência

IsolatedStorageFile

Conceitos

armazenamentos isolados

Como: Obter armazenamentos para o armazenamento isolado

Histórico de alterações

Date

History

Motivo

Dezembro de 2010

Adicionadas informações sobre o AvailableFreeSpace propriedade.

Aprimoramento de informações.