Silverlight - Dosya Erişimi

Bu bölümde, Silverlight uygulamalarının son kullanıcının bilgisayarındaki dosyalara nasıl erişebileceğini göreceğiz. Silverlight'ta dosyalara erişmenin üç ana yolu vardır. Seçim, dosyaları kullanma ihtiyacınızın nedenine ve güvenilir bir uygulama yazıp yazmadığınıza bağlı olacaktır.

  • En esnek seçenek, file dialogsınıflar. İleOpen ve Savedosya iletişim kutuları, kullanıcı uygun izinlere sahip olduğu sürece son kullanıcının seçtiği herhangi bir dosyaya erişebilirsiniz. Kullanıcı izni, bu yaklaşımın merkezinde yer alır. Kullanıcının hangi dosyayı okuyacağını seçmesi gerekir veya kaydederken, üzerine yazmak için bir dosya seçer veya sizin için bir konum ve dosya adı seçer.

  • İkinci seçenek, çeşitli sınıfları kullanmaktır. System.IOad alanı. Silverlight aşağıdaki gibi sınıflar sunar:FileStream, StreamWriter, FileInfo, Directory, ve DirectoryInfoBunların tümü, kullanıcıyı dahil etmeye gerek kalmadan dosyaları açan ve bunlara erişen kod yazmayı mümkün kılar. Bu, geliştirici için daha uygun olabilir, ancak elbette çoğu kullanıcı, dosyalarında arama yapabilmek için bir web sayfasının parçası olarak indirilen herhangi bir eski kod istemez.

  • Üçüncü seçenek Isolated Storage, daha sonra tartışacağız.

Dosya İletişim Kutularını Aç ve Kaydet

SaveFileDialog

SaveFileDialog sınıfı, bir dosyanın nereye kaydedileceğini seçmek için standart işletim sistemi tarafından sağlanan kullanıcı arayüzünü gösterir.

Bazı önemli özellikler:

  • Kullanmak için, SaveFileDialog sınıf.

  • Aranıyor ShowDialog, görünmesine neden olur ve dönüş kodu bize kullanıcının dosyayı kaydetmek için bir yer seçip seçmediğini veya iletişim kutusunu iptal edip etmediğini söyler.

  • Gereksiz görünen karşılaştırmayı merak ediyor olabilirsiniz. TrueOrada. EğerShowDialog İadeler Truedeğeri, kullanıcının bir dosya seçtiği anlamına gelir. Böylece aramaya devam edebilirizOpenFile bize döndüren yöntem Stream.

  • İstersek kullanıcının seçtiği ismi keşfedebiliriz. İletişim kutusu adı verilen bir özellik sağlarSafeFileName, ancak bu yolu içermez. Her durumda, veri yazmanın tek yolu,Streamiletişim kutusu tarafından döndürüldü. Bir geliştiricinin bakış açısından, bu sadece sıradan bir.NET stream, böylece onu bir StreamWriter, içine metin yazmak için.

OpenFileDialog

OpenFileDialog, kullanım açısından SaveFileDialog. Açıkçası, her zaman yeni bir dosya yerine mevcut bir dosyayı seçiyorsunuz, ancak önemli bir fark daha var.

  • Adlı bir özellik sunuyor MultiSelect. Eğer bunu ayarlarsanTrue, kullanıcı birden çok dosya seçebilir. Bu, iletişim kutusunun biraz daha karmaşık bir API'ye ihtiyacı olduğu anlamına gelir.

  • SaveFileDialog bir seferde yalnızca bir dosya ile ilgilenir, ancak OpenFileDialog daha fazlasıyla baş edebildiğinden, OpenFileyöntem. Kodu genişletmemiz gerekiyor. İletişim kutusunun içinde olup olmadığına bağlı olaraksingle file modu veya MultiSelect modu, ya onun Fileveya Files Emlak.

  • Aşağıda verilen örnekte tek dosya modundayız. Bu nedenle kullanıyoruzFileve biz ararız OpenRead üzerinde FileInfo dönen nesne.

  • İçinde multiselect modu, kullanırdık Files bunun yerine, bir koleksiyon döndürür FileInfo nesneler.

Dosya akışı

İkinci yaklaşım file access yukarıda belirtildiği gibi kullanmaktır FileStream sınıf veya ilgili türler System.IOdoğrudan ad alanı. Bununla ilgili söylenecek pek bir şey yok, çünkü çoğunlukla, tam dosya erişimiyle dosya erişimine benzer..NET Framework.

Bununla birlikte, Silverlight'a özgü birkaç bükülme var.

  • Birincisi, bu yaklaşım dosyalara kullanıcı müdahalesi olmadan istediğiniz zaman erişmenize izin verir ve dosya etkinliğinin herhangi bir görünür belirtisi olmadan, yalnızca güvenilir uygulamaların bu tekniği kullanmasına izin verilir. Unutmayın, yüksek güven elde etmek için tarayıcınızın bitmesi gerekir.

  • İkinci sorun, yalnızca belirli klasörlerdeki dosyaların kullanılabilir olmasıdır. Yalnızca altında bulunan dosyaları okuyabilir ve yazabilirsiniz.User's Documents, Music, Pictures, or Video files. Bunun bir nedeni, Silverlight'ın birden çok platformda çalışması ve örneğin bir Apple Mac için dosya sistemi yapısının Windows'unkinden çok farklı olmasıdır. Bu nedenle, platformlar arası dosya erişimi, Silverlight'ın desteklediği tüm sistemlerde bulunan sınırlı bir klasör kümesi bağlamında çalışmalıdır.

  • Bu klasörler farklı işletim sistemlerinde farklı konumlarda olacağından ve konumları tipik olarak bir kullanıcıdan diğerine değişiklik göstereceğinden, Environment.GetFolderPath çalışma zamanında gerçek konumu keşfetme yöntemi.

  • Başlangıç ​​noktalarının altındaki dizin yapısını inceleyebilirsiniz. Directory ve DirectoryInfo sınıflar System.IO ad alanı, dosyaları ve dizinleri numaralandırmanıza izin verir.

Dosyanın şu yolla açılabileceği basit bir örnek düşünün: OpenFileDialog ve dosyaya bir miktar metin kaydedin SaveFileDialog.

Aşağıda, iki düğme ve bir text box yaratıldı.

<UserControl x:Class = "FileDialogs.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">
	
      <Grid.RowDefinitions> 
         <RowDefinition Height = "Auto" /> 
         <RowDefinition Height = "265*" /> 
      </Grid.RowDefinitions>
		
      <Button 
         x:Name = "saveFileButton" 
         Content = "Save" 
         Width = "75" FontSize = "20" 
         HorizontalAlignment = "Left" VerticalAlignment = "Top" 
         Margin = "12,12" Click = "saveFileButton_Click" /> 
				
      <Button 
         x:Name = "openFileButton" 
         Content = "Open" 
         Width = "75" FontSize = "20" 
         HorizontalAlignment = "Left" VerticalAlignment = "Top" 
         Margin = "101,12,0,0" Click = "openFileButton_Click" /> 
				
      <TextBox 
         x:Name = "contentTextBox" 
         Grid.Row = "1" 
         Margin = "12" FontSize = "20" /> 
				
   </Grid> 
	
</UserControl>

Aşağıda verilen, dosyanın açılıp kaydedildiği tıklama olayları uygulaması için C # kodudur.

using System; 
using System.Diagnostics; 
using System.IO; 

using System.Windows; 
using System.Windows.Controls; 
 
namespace FileDialogs {

   public partial class MainPage : UserControl { 
	
      public MainPage() { 
         InitializeComponent(); 
      }
	  
      private void saveFileButton_Click(object sender, RoutedEventArgs e) { 
         var save = new SaveFileDialog(); 
         save.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"; 
         save.DefaultExt = ".txt"; 
			
         if (save.ShowDialog() == true) { 
            Debug.WriteLine(save.SafeFileName); 
            using (Stream saveStream = save.OpenFile()) 
            using (var w = new StreamWriter(saveStream)) { 
               var fs = saveStream as FileStream; 
					
               if (fs != null) { 
                  w.Write(contentTextBox.Text); 
               } 
            } 
         } 
      }
	  
      private void openFileButton_Click(object sender, RoutedEventArgs e) { 
         var open = new OpenFileDialog(); 
			
         if (open.ShowDialog() == true) { 
            using (Stream openStream = open.File.OpenRead()) { 
               using (var read = new StreamReader(openStream)) { 
                  contentTextBox.Text = read.ReadToEnd(); 
               } 
            } 
         }  
      } 
   } 
}

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, iki düğme içeren aşağıdaki web sayfasını göreceksiniz.

Tıkla Open açılacak olan düğme OpenFileDialog bir metin dosyası seçmek için.

Bir metin dosyası seçin ve tıklayın Open, metni metin kutusunda göreceksiniz.

Metni dosyaya kaydetmek için metni güncelleyin.

Tıkla Save Değişiklikleri yeni metin dosyasına veya mevcut dosyaya kaydetmek için düğmesine basın.

Mevcut metin dosyasına değişiklikleri kaydetmek için metin dosyasını seçin. SaveFileDialog, ancak değişiklikleri yeni dosyaya kaydetmek istiyorsanız, dosya adını yazın ve Save buton.