Anvisningar: Förutse out-of-space-förhållanden med isolerad lagring
Kod som använder isolerad lagring begränsas av en kvot som anger den maximala storleken för det datautrymme där isolerade lagringsfiler och kataloger finns. Kvoten definieras av en säkerhetsprincip och kan konfigureras av administratörer. Om den maximala tillåtna storleken överskrids när du försöker skriva data utlöses ett IsolatedStorageException undantag och åtgärden misslyckas. Detta hjälper till att förhindra skadliga överbelastningsattacker som kan leda till att programmet nekar begäranden eftersom datalagringen är fylld.
För att hjälpa dig att avgöra om ett visst skrivförsök sannolikt kommer att misslyckas av den här anledningen tillhandahåller IsolatedStorage klassen tre skrivskyddade egenskaper: AvailableFreeSpace, UsedSizeoch Quota. Du kan använda de här egenskaperna för att avgöra om skrivning till arkivet gör att den maximala tillåtna storleken på arkivet överskrids. Tänk på att isolerad lagring kan nås samtidigt. När du beräknar mängden återstående lagringsutrymme kan lagringsutrymmet därför förbrukas när du försöker skriva till arkivet. Du kan dock använda den maximala storleken på arkivet för att avgöra om den övre gränsen för tillgängligt lagringsutrymme är på väg att nås.
Egenskapen Quota är beroende av bevis från sammansättningen för att fungera korrekt. Därför bör du endast hämta den här egenskapen på IsolatedStorageFile objekt som har skapats med hjälp GetUserStoreForAssemblyav metoden , GetUserStoreForDomaineller GetStore . IsolatedStorageFile objekt som har skapats på något annat sätt (till exempel objekt som returnerades från GetEnumerator metoden) returnerar inte en korrekt maximal storlek.
Exempel
I följande kodexempel hämtas ett isolerat arkiv, några filer skapas och egenskapen hämtas AvailableFreeSpace . Återstående utrymme rapporteras i byte.
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