Silverlight 3.0 : Uloženie obsahu do súboru na lokálnom PC
Aby bolo možné ukladať časti kontextu Silverlight aplikácie do súboru na lokálnom disku, pribudol vo verzii Silverlight 3 dialóg typu „Save File“. Projekt pre otestovanie tejto funkcionality bude obsahovať pole typu text Box pre zadanie textu, ktorý má byť uložený do súboru a tlačidlo pre aktiváciu ukladania:
<Grid x:Name="LayoutRoot" Background="Cyan">
<TextBox x:Name="tbText" Height="25" Text="Vstup textu..."></TextBox>
<Button x:Name="btUloz" Height="35" Margin="295,0,133,164"
VerticalAlignment="Bottom" Content="Uloz text" Click="btUloz_Click" />
</Grid>
Obsluha udalosti stlačenia tlačidla bude pracovať s objektom SaveFileDialog:
private void btUloz_Click(object sender, System.Windows.RoutedEventArgs e)
{
SaveFileDialog sfdUloz = new SaveFileDialog();
bool? sf = sfdUloz.ShowDialog();
if (sf == true)
{
using (Stream fs = (Stream)sfdUloz.OpenFile())
{
byte[] info = (new UTF8Encoding(true)).GetBytes(tbText.Text);
fs.Write(info, 0, info.Length);
fs.Close();
}
}
}
Do kódu je potrebné pridať referencie na namespace:
using System.IO;
using System.Text;
V prípade vopred známeho typu súboru je možné pre objekt SaveFileDialog nastaviť filter:
saveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = ".txt";
saveDialog.Filter = "Text File|*.txt|All Files|*.*";
V predchádzajúcom príklade bol príklad uloženia textu do súboru, pričom text bol vygenerovaný Silverlight aplikáciou, presnejšie zadaný používateľom a spracovaný Silverlight aplikáciou. V druhom typickom scenári bude do súboru uložený obsah prevzatý z webu, v tomto prípade obrázok. Ako obrázok môžete využiť Silverlight logo z URL adresy http://silverlight.net/Themes/silverlight/images/logo.jpg.
Upozornenie: Úloha sa zdá byť na prvý pohľad jednoduchá, stačí vytvoriť a aktivovať dialóg, vybrať meno súboru a uložiť ako binárny obsah. No binárny obsah je možné ukladať až vtedy, keď sa z webu načíta, čiže procedúra pre ukladanie obrázka musí byť aktivovaná až po jeho načítaní. Objekt SaveFileDialog je skonštruovaný na úrovni hlavnej triedy MainControl :UserControl, aby ho mohli využívať obidve procedúry. Procedúra Ukladanie sa aktivuje až po načítaní obsahu z webu:
using System.IO;
using System.Text;
using System.Net;
namespace SL3out
{
public partial class MainControl : UserControl
{
SaveFileDialog sfd = new SaveFileDialog();
public MainControl()
{
// Required to initialize variables
InitializeComponent();
}
private void btUloz_Click(object sender, System.Windows.RoutedEventArgs e)
{
sfd.DefaultExt = ".jpg";
sfd.Filter = "JPG File|*.jpg|All Files|*.*";
bool? open = sfd.ShowDialog();
if (open.HasValue && open.Value)
{
Uri ur = new
Uri("http://silverlight.net/Themes/silverlight/images/logo.jpg");
WebClient wc = new WebClient();
wc.OpenReadAsync(ur);
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(Ukladanie);
}
}
void Ukladanie(object sender, OpenReadCompletedEventArgs e)
{
if (!e.Cancelled)
{
using (Stream fs = sfd.OpenFile())
{
int length = Convert.ToInt32(e.Result.Length);
byte[] byteResult = new byte[length];
e.Result.Read(byteResult, 0, length);
fs.Write(byteResult, 0, byteResult.Length);
fs.Close();
}
}
}
}
}
Späť na obsah