Procedure: Verwachte out-of-space-omstandigheden met geïsoleerde opslag
Code die gebruikmaakt van geïsoleerde opslag wordt beperkt door een quotum dat de maximale grootte aangeeft voor het gegevenscompartiment waarin geïsoleerde opslagbestanden en mappen bestaan. Het quotum wordt gedefinieerd door beveiligingsbeleid en kan worden geconfigureerd door beheerders. Als de maximaal toegestane grootte wordt overschreden wanneer u probeert gegevens te schrijven, wordt er een IsolatedStorageException uitzondering gegenereerd en mislukt de bewerking. Dit helpt schadelijke Denial-of-Service-aanvallen te voorkomen die ertoe kunnen leiden dat de toepassing aanvragen weigert omdat de gegevensopslag is gevuld.
Om u te helpen bepalen of een bepaalde schrijfpoging om deze reden waarschijnlijk mislukt, biedt de IsolatedStorage klasse drie alleen-lezen eigenschappen: AvailableFreeSpace, UsedSizeen Quota. U kunt deze eigenschappen gebruiken om te bepalen of schrijven naar het archief ertoe leidt dat de maximale toegestane grootte van het archief wordt overschreden. Houd er rekening mee dat geïsoleerde opslag gelijktijdig toegankelijk is; Dus wanneer u de hoeveelheid resterende opslagruimte berekent, kan de opslagruimte worden verbruikt door de tijd die u probeert te schrijven naar de store. U kunt echter de maximale grootte van het archief gebruiken om te bepalen of de bovengrens voor beschikbare opslag op het punt staat te worden bereikt.
De Quota eigenschap is afhankelijk van bewijs van de assembly om goed te werken. Daarom moet u deze eigenschap alleen ophalen voor IsolatedStorageFile objecten die zijn gemaakt met behulp van de GetUserStoreForAssembly, GetUserStoreForDomainof GetStore methode. IsolatedStorageFile objecten die op een andere manier zijn gemaakt (bijvoorbeeld objecten die zijn geretourneerd door de GetEnumerator methode), retourneren geen nauwkeurige maximale grootte.
Opmerking
Het volgende codevoorbeeld verkrijgt een geïsoleerd archief, maakt een paar bestanden en haalt de AvailableFreeSpace eigenschap op. De resterende ruimte wordt gerapporteerd in 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