Silverlight - İzole Depolama
Üçüncü dosya erişim mekanizması Isolated Storageoturum açmış kullanıcıyla ilişkili depolama sağlayan mekanizma. API, verileri şu yolla sunar:Stream sınıf .NET System.IOad alanı. Bu nedenle, şu ana kadar incelediğimiz diğer mekanizmalarda olduğu gibi, diğer türleri de kullanabilirsiniz.System.IO metinsel veya ikili verileri depolamanıza olanak tanıyan akışlarla çalışmak için.
Bazı önemli özellikler şunlardır:
Bu depolama mekanizmasına Isolated Storage çünkü mağaza bölümlenmiş ve bir Silverlight uygulamasının yalnızca belirli parçalara erişimi var.
Saklanan eski verilere erişemezsiniz. Her şeyden önce, mağaza kullanıcı başına bölümlenmiştir. Silverlight uygulaması, oturum açan ve uygulamayı çalıştırandan farklı bir kullanıcı için mağazaya erişim sağlayamaz.
Bunun, web uygulamanızın kullanabileceği herhangi bir tanımlama mekanizmasıyla ilgisi yoktur. Bu hatırlanması gereken önemli bir noktadır çünkü bilgisayarları paylaşan bazı kişiler ayrı Windows hesaplarıyla uğraşmazlar ve sadece kullandıkları web sitelerine giriş ve çıkış yapmaya alışkındır.
İzole Depolamayı Kullanma
Yalıtılmış Depolama, Silverlight'a özgü değildir. API, başlangıçtaWindows FormsWeb'den başlatılan uygulamaların verileri yerel olarak kısmi güven senaryolarında depolamasını sağlamak için. Uygulama farklıdır ve tam uygulamaya erişmenin bir yolu yoktur..NET Framework'ün Silverlight'tan Yalıtılmış Depolaması veya tam tersi.
Ancak, kullandıysanız, buradaki adımlar çok tanıdık gelecektir.
Kullanıcıya özel mağazayı sorarak başlayın. Bu durumda başvuru için bir tane istiyoruz. Sitedeki tüm XAP'ler tarafından site başına mağazanın paylaşılmasını isteseydik,GetUserStoreForSite yerine.
Her iki yöntem de bir IsolatedStorageFile Bu bir dosya değil, bir dizini temsil ettiği için oldukça yardımcı olmayan bir isim olan nesne.
Bir dosyaya erişmek için şunu sormanız gerekir: IsolatedStorageFile için Stream.
Kullanıyoruz IsolatedStorageFileStream sınıf ve kurucusu, IsolatedStorageFile argüman olarak nesne.
Bu yüzden mağazada yeni bir dosya oluşturuyoruz. Dosyanın diskteki tam konumu bilinmiyor.
İçeren dizin, dosyanın adını tahmin etmeyi imkansız kılmak için rastgele öğeler içerir.
Bu olmadan, kötü amaçlı web sitelerinin kullanıcının bilgisayarına bir dosya yerleştirmesi ve ardından kullanıcıyı bir programı yerel olarak çalıştıran bir bağlantıya tıklaması umuduyla açmak için bir dosya URL'si oluşturması mümkün olabilir.
Windows'ta bunun olmasını engellemeye çalışan çeşitli başka güvenlik önlemleri vardır, ancak bu, diğerlerinin bir şekilde devre dışı bırakılması veya atlanması durumunda başka bir savunma katmanıdır.
Dosya, kullanıcının profilinde bir yerde saklanacaktır, ancak bu, sizin hakkınızda bildiğiniz kadardır. SizinIsolatedStorageFileStream gerçek konumunu bildirmeyecek.
Uygulamanın kaç kez çalıştırıldığını izleyen basit bir örneğe bakalım. Aşağıda verilen XAML kodudur.
<UserControl x:Class = "StoreRunCount.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d"
d:DesignHeight = "300" d:DesignWidth = "400">
<Grid x:Name = "LayoutRoot" Background = "White">
<TextBlock x:Name = "runCountText" FontSize = "20" />
</Grid>
</UserControl>
İşte C # kodu Isolated storage kullanılmış.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO.IsolatedStorage;
using System.IO;
namespace StoreRunCount {
public partial class MainPage : UserControl {
const string RunCountFileName = "RunCount.bin";
public MainPage() {
InitializeComponent();
int runCount = 0;
using (var store = IsolatedStorageFile.GetUserStoreForApplication()) {
if (store.FileExists(RunCountFileName)) {
using (var stm = store.OpenFile(RunCountFileName,
FileMode.Open, FileAccess.Read))
using (var r = new BinaryReader(stm)) {
runCount = r.ReadInt32();
}
}
runCount += 1;
using (var stm = store.OpenFile(RunCountFileName,
FileMode.Create, FileAccess.Write))
using (var w = new BinaryWriter(stm)) {
w.Write(runCount);
}
}
runCountText.Text = "You have run this application " + runCount.ToString() + " time(s)";
}
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, bu uygulamayı kaç kez çalıştırdığınızı size gösterecek olan aşağıdaki web sayfasını göreceksiniz.
Kotanızı Artırmak
Herhangi bir nedenle başlangıç miktarı yetersizse başvurular daha fazla alan isteyebilir. İsteğin başarılı olacağına dair hiçbir garanti yoktur. Silverlight, kullanıcıya uygulamaya daha fazla alan vermekten memnun olup olmadığını soracaktır.
Bu arada, yalnızca kullanıcı girdisine yanıt olarak daha fazla depolama alanı istemenize izin verilir. click. Eklenti yüklenirken veya bir zamanlayıcı işleyicide olduğu gibi başka bir zaman sormaya çalışırsanız, Silverlight kullanıcıya sormadan isteği otomatik olarak başarısız olur. Ekstra kota yalnızca kullanıcının etkileşimde olduğu uygulamalar için mevcuttur.
IsolatedStorageFile nesne, kotayı yönetmek için üç üye sağlar -
- AvailableFreeSpace
- IncreaseQuotaTo
- Quota
MevcutFreeSpace
AvailableFreeSpace özelliği, kotanızın ne kadarının boş kaldığını söyler.
İşletim sisteminin dizini temsil etmek için diskte yer ayırması gerektiğinden boş bir alt dizinin bile kotanızın bir kısmını kullandığını unutmayın. Dolayısıyla, kullanılabilir alan toplam kotadan daha az olabilir, eksi tüm dosyalarınızın toplam boyutu.
IncreaseQuotaTo
Devam etmek için yeterli alanınız yoksa, arayarak daha fazlasını istersiniz. IncreaseQuotaTo yöntem.
Kota
Burada üçüncü mülkü kullanıyoruz, Quota, mevcut kota boyutunu keşfetmek ve ardından talep edilen yeni kotamızı almak için ihtiyaç duyduğumuz ekstra miktarı ekliyoruz.
Yöntem ya True veya Falseistediğimizin tahsis edilip edilmediğini belirtmek için. Silverlight'ın istediğinizden daha fazla alan ayırmaya karar verebileceğini unutmayın.
İşte bunu artırmak için basit bir örnek quota, düğme tıklandığında. Aşağıda verilen XAML kodudur.
<UserControl x:Class = "ChangeQuota.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d"
d:DesignHeight = "300" d:DesignWidth = "400">
<Grid x:Name = "LayoutRoot" Background = "White">
<TextBlock x:Name = "infoText" FontSize = "20" TextWrapping = "Wrap" />
<Button x:Name = "increaseQuota" Content = "Increase" HorizontalAlignment = "Center"
FontSize = "20"
VerticalAlignment = "Center" Click = "increaseQuota_Click" />
</Grid>
</UserControl>
İşte uygulaması click kotanın artırıldığı olay.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO.IsolatedStorage;
namespace ChangeQuota {
public partial class MainPage : UserControl {
public MainPage() {
InitializeComponent();
}
private void increaseQuota_Click(object sender, RoutedEventArgs e) {
using (IsolatedStorageFile isoStore =
IsolatedStorageFile.GetUserStoreForApplication()) {
long newQuota = isoStore.Quota + 10240;
if (isoStore.IncreaseQuotaTo(newQuota)) {
infoText.Text = "Quota is " + isoStore.Quota + ", free space: " +
isoStore.AvailableFreeSpace;
} else {
infoText.Text = "Meanie!";
}
}
}
}
}
Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki çıktıyı göreceksiniz.
Tıkladığınızda Increasekomut istemi belirir. Artırmak isterQuota halihazırda olduğundan 10 KB daha büyük olması.
Tıkladığınızda Yes, daha sonra mevcut Kota miktarını yazdırır.
Daha iyi anlamak için yukarıdaki örnekleri uygulamanızı tavsiye ederiz.