Postupy: Příprava na vyčerpání volného prostoru pomocí izolovaného úložiště
Kód, který používá izolované úložiště, je omezen kvótou, která určuje maximální velikost datového prostoru, ve kterém existují izolované soubory úložiště a adresáře. Kvóta je definována zásadami zabezpečení a je konfigurovatelná správci. Pokud se při pokusu o zápis dat překročí maximální povolená velikost, IsolatedStorageException vyvolá se výjimka a operace selže. To pomáhá zabránit škodlivým útokům na dostupnost služby, které by mohly způsobit odmítnutí požadavků aplikace, protože je vyplněné úložiště dat.
Chcete-li zjistit, zda daný pokus o zápis pravděpodobně selže z tohoto důvodu, IsolatedStorage třída poskytuje tři vlastnosti jen pro čtení: AvailableFreeSpace, UsedSizea Quota. Tyto vlastnosti můžete použít k určení, zda zápis do úložiště způsobí překročení maximální povolené velikosti úložiště. Mějte na paměti, že k izolovanému úložišti je možné přistupovat souběžně; Proto při výpočtu množství zbývajícího úložiště může prostor úložiště spotřebovat čas, kdy se pokusíte zapisovat do úložiště. Maximální velikost úložiště ale můžete použít k určení, jestli se blíží horní limit dostupného úložiště.
Vlastnost Quota závisí na důkazech ze sestavení, aby fungoval správně. Z tohoto důvodu byste měli tuto vlastnost načíst pouze u IsolatedStorageFile objektů, které byly vytvořeny pomocí GetUserStoreForAssembly, GetUserStoreForDomainnebo GetStore metody. IsolatedStorageFile objekty vytvořené jiným způsobem (například objekty vrácené z GetEnumerator metody) nevrátí přesnou maximální velikost.
Příklad
Následující příklad kódu získá izolované úložiště, vytvoří několik souborů a načte AvailableFreeSpace vlastnost. Zbývající místo se hlásí v bajtech.
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