Makale Özeti

Bu yazımızda Silverlight 2.0 Beta 2 içerisinde istemci tarafındaki dosyalara erişmenin yolu olan Open File Dialog nesnesinin kullanımını inceliyoruz.

Makale

Silverlight 2.0 Beta 2 içerisinden normal şartlarda uygulamanın çalıştığı bilgisayardaki dosyalara ulaşma şansınız olmaz. Bu durum aslında çok normal bir durum çünkü Silverlight tamamen internet tarayıcısı içerisinde çalışıyor ve dışarıya çıkarak sisteme ulaşması büyük bir güvenlik açığı olurdu. Oysa bizim bazı durumlarda Silverlight tarafına sistemimizdeki bir dosyayı aktarmak isteyebiliriz. Örneğin sistemdeki bir video dosyasını kullanıcının web sitesindeki Silverlight ile açarak oynatmasını isteyebiliriz. Özellikle bu Silverlight uygulamasının Macintosh tarafında da çalışacağını düşünürsek aslında Mac için basit bir WMV Player bile yapmış oluyoruz. Peki sistemdeki dosyalara nasıl ulaşacağız? Tabi ki "Open File Dialog" aracılığı ile.

Uygulamamızı tasarlayalım.

İlk olarak istemci tarafındaki video dosyalarını oynatacak olan uygulamamızın ana ekran tasarımını yapalım. Sahnede adı Video olan bir MediaElement ve bir de Button bulunacak. Düğmeye basıldığında Open File Dialog aracılığı ile istemcide video dosyalarından birini alacağız.

<UserControl x:Class="SilverlightApplication55.Page"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   Width="400" Height="300">

    <Grid x:Name="LayoutRoot" Background="White">

        <MediaElement Margin="24,8,128,84" x:Name="Video"/>

        <Button Height="24" HorizontalAlignment="Stretch" Margin="192,0,128,44" VerticalAlignment="Bottom" Content="Dosya Aç" x:Name="btnAc" Click="btnAc_Click"/>

    </Grid>

</UserControl>

Kodlama zamanı

Düğmemize basıldığında ilk olarak yeni bir Open File Dialog yaratacağız sonrasında da nesnemizin özelliklerini tanımlayacağız.

[VB]

Dim DosyaAc As New OpenFileDialog

DosyaAc.Filter = "WMV Dosyaları (*.wmv)|*.wmv"

DosyaAc.Multiselect = False

DosyaAc.ShowDialog()

[C#]

OpenFileDialog DosyaAc = new OpenFileDialog();

DosyaAc.Filter = "WMV Dosyaları (*.wmv)|*.wmv";   

DosyaAc.Multiselect = false;   

DosyaAc.ShowDialog();

Kod içerisinde Open File Dialog'un ilk olarak Filter özelliğini tanımlıyoruz. Aslında buradaki kullanım Windows Forms'daki kullanım ile neredeyse aynı. Bizim örneğimizdeki filtrede kullanıcıya sadece WMV dosyalarını seçtiriyoruz. Bir sonraki adımda Open File Dialog nesnemizin Multiselect özelliğinide False yaparak bir defada sadece bir dosya seçilebilmesini de sağladıktan sonra artık Dialog'u ekranda göstermek için ShowDialog metodunu çağırabiliriz.

[VB]

If DosyaAc.SelectedFile IsNot Nothing Then

Video.AutoPlay = True

Video.SetSource(DosyaAc.SelectedFile.OpenRead)

End If

[C#]

if (DosyaAc.SelectedFile != null) {

    Video.AutoPlay = true;

    Video.SetSource(DosyaAc.SelectedFile.OpenRead);

}

Kullanıcı Open File Dialog'u kapattıktan sonra herhangi bir dosyanın seçilip seçilmediğini SelectedFile özelliği üzerinden kontrol ederek eğer dosya seçilmiş ise OpenRead metodu ile dosyayı okuyabiliyoruz. Biz okuduğumuz dosyayı MediaElement'in Source'una aktaracağımız için ilk olarak aktarma sonrası hemen video oynatılsın diye MediaElement'in AutoPlay özelliğini True yapıyoruz. Son olarak da SetSource metoduna elimizdeki dosyayı aktarıyoruz. Böylece artık video dosyası MediaElement içerisinde oynatılıyor olacak. Unutmayın videoyu sunucuya almadık, hala tamamen istemci tarafında çalışıyoruz.

Birden çok dosya okuyalım

Open File Dialog'un MultiSelect özelliği True olduğunda birden çok dosya seçilerek işlem yapılabiliyor. Bu konudaki örneğimizde sahnede bir TextBox ve bir düğme bulunacak. Düğmeye tıklandığında sistemden kullanıcıların istedikleri kadar fazla sayıda TXT dosyası seçebilecekler. Bu dosyaların hepsinin içeriğini arka arkaya TextBox içerisine yerleştireceğiz.

[VB]

        Dim DosyaAc As New OpenFileDialog

        DosyaAc.Filter = "TXT Dosyaları (*.txt)|*.txt"

        DosyaAc.Multiselect = True

        DosyaAc.ShowDialog()

        If DosyaAc.SelectedFiles IsNot Nothing Then

            For Each Dosya In DosyaAc.SelectedFiles

                txtMetin.Text += Dosya.OpenText.ReadToEnd

            Next

        End If

[C#]

OpenFileDialog DosyaAc = new OpenFileDialog();

DosyaAc.Filter = "TXT Dosyaları (*.txt)|*.txt";

DosyaAc.Multiselect = true;

DosyaAc.ShowDialog();

if (DosyaAc.SelectedFiles != null) {

    foreach ( Dosya in DosyaAc.SelectedFiles) {

        txtMetin.Text += Dosya.OpenText.ReadToEnd;

    }

}

Yukarıdaki kod içerisinde her zamanki gibi Open File Dialog nesnemizi oluşturarak uygun filtreyi tanımlıyoruz. Dikkat etmemiz gereken nokta Multiselect özelliğinin True olarak ayarlanmış olması. Dosyalar seçildikten sonra SelectedFiles listesinden her bir dosyayı tek tek alarak OpenText metoduyla dosya içerisindeki yazıyı okuyarak txtMetin adındaki TextBox nesnemize aktarıyoruz.

Hepinize kolay gelsin.

Daron Yöndem
MVP, MCT, MCPD, MCITP, MCTS
MCSD, MCAD, MCDBA, MCP, ACP, ICSD
Blog: http://daron.yondem.com
Sorularınız için: http://daron.yondem.com/tr/sorusor