Silverlight - Akses File

Dalam bab ini, kita akan melihat bagaimana aplikasi Silverlight dapat mengakses file di komputer pengguna akhir. Ada tiga cara utama untuk mengakses file di Silverlight. Pilihannya akan bergantung pada alasan Anda perlu menggunakan file, dan apakah Anda menulis aplikasi tepercaya.

  • Opsi paling fleksibel adalah menggunakan file file dialogkelas. DenganOpen dan Savefile dialog, Anda bisa mendapatkan akses ke file apa pun yang dipilih pengguna akhir, selama pengguna memiliki izin yang sesuai. Persetujuan pengguna adalah inti dari pendekatan ini. Pengguna harus memilih file mana yang akan dibaca, atau saat menyimpan, mereka memilih file untuk ditimpa atau memilih lokasi dan nama file untuk Anda.

  • Opsi kedua adalah menggunakan berbagai kelas di System.IOnamespace. Silverlight menawarkan kelas-kelas sepertiFileStream, StreamWriter, FileInfo, Directory, dan DirectoryInfo, yang semuanya memungkinkan untuk menulis kode yang membuka dan mengakses file tanpa perlu melibatkan pengguna. Itu mungkin lebih nyaman bagi pengembang, tetapi tentu saja, sebagian besar pengguna tidak ingin kode lama apa pun diunduh sebagai bagian dari laman web untuk dapat mencari di dalam file mereka.

  • Opsi ketiga adalah Isolated Storage, yang akan kita bahas nanti.

Buka & Simpan File Dialog

SaveFileDialog

Itu SaveFileDialog kelas menunjukkan antarmuka pengguna yang disediakan sistem operasi standar untuk memilih tempat menyimpan file.

Beberapa fitur penting adalah -

  • Untuk menggunakannya, kami membuat instance dari SaveFileDialog kelas.

  • Panggilan ShowDialog, menyebabkannya muncul, dan kode yang dikembalikan memberi tahu kita apakah pengguna memilih tempat untuk menyimpan file, atau membatalkan dialog.

  • Anda mungkin bertanya-tanya tentang perbandingan yang tampak berlebihan dengan Truesana. JikaShowDialog kembali Truenilai, yang berarti pengguna telah memilih file. Jadi kita bisa melanjutkan dengan memanggilOpenFile metode, yang mengembalikan kita a Stream.

  • Jika mau, kita bisa menemukan nama yang dipilih pengguna. Dialog tersebut menyediakan properti yang disebutSafeFileName, tapi itu tidak termasuk jalannya. Bagaimanapun, satu-satunya cara untuk menulis data adalah dengan menggunakanStreamdikembalikan oleh dialog. Dari perspektif pengembang, ini hanyalah hal biasa.NET stream, jadi kita bisa membungkusnya dalam file StreamWriter, untuk menulis teks ke dalamnya.

OpenFileDialog

OpenFileDialog mirip penggunaannya dengan SaveFileDialog. Jelasnya, Anda selalu memilih file yang sudah ada daripada yang baru, tetapi ada perbedaan penting lainnya.

  • Ia menawarkan sebuah properti bernama MultiSelect. Jika Anda menyetelnya keTrue, pengguna dapat memilih banyak file. Ini berarti dialog membutuhkan API yang sedikit lebih kompleks.

  • Itu SaveFileDialog hanya berurusan dengan satu file dalam satu waktu, tetapi OpenFileDialog mampu mengatasi lebih banyak, sehingga tidak menawarkan OpenFilemetode. Kita perlu memperluas kodenya. Bergantung pada apakah dialog masuksingle file mode, atau MultiSelect mode, Anda menggunakan salah satunya File, atau Files Properti.

  • Di sini, dalam contoh yang diberikan di bawah ini, kita berada dalam mode file tunggal. Oleh karena itu, kami menggunakanFile, dan kami menelepon OpenRead di FileInfo objek yang kembali.

  • Di multiselect mode, kami akan menggunakan Files sebagai gantinya, yang mengembalikan koleksi FileInfo benda.

FileStream

Pendekatan kedua untuk file access seperti yang disebutkan di atas adalah dengan menggunakan FileStream kelas, atau jenis terkait di System.IOnamespace secara langsung. Tidak banyak yang bisa dikatakan tentang ini, karena sebagian besar, ini mirip dengan akses file dengan penuh.NET Framework.

Namun, ada beberapa perubahan khusus Silverlight.

  • Pertama, pendekatan ini memungkinkan Anda mengakses file kapan saja tanpa campur tangan pengguna, dan tanpa indikasi aktivitas file yang terlihat jelas, hanya aplikasi tepercaya yang diizinkan untuk menggunakan teknik ini. Ingat, Anda harus kehabisan browser untuk mendapatkan kepercayaan yang tinggi.

  • Masalah kedua adalah hanya file di folder tertentu yang tersedia. Anda hanya dapat membaca dan menulis file yang ada di bawahUser's Documents, Music, Pictures, or Video files. Salah satu alasannya adalah Silverlight berjalan pada berbagai platform, dan struktur sistem file untuk, katakanlah, Apple Mac, sangat berbeda dari Windows. Karenanya, akses file lintas platform harus berfungsi dalam hal kumpulan folder terbatas yang tersedia di semua sistem yang didukung Silverlight.

  • Karena folder ini akan berada di lokasi yang berbeda pada sistem operasi yang berbeda, dan lokasinya biasanya akan berbeda dari satu pengguna ke pengguna lainnya, Anda perlu menggunakan Environment.GetFolderPath metode untuk menemukan lokasi sebenarnya pada waktu proses.

  • Anda dapat memeriksa struktur direktori di bawah titik awal. ItuDirectory dan DirectoryInfo kelas di System.IO namespace memungkinkan Anda menghitung file dan direktori.

Pertimbangkan contoh sederhana di mana file dapat dibuka melalui OpenFileDialog dan simpan beberapa teks ke file melalui SaveFileDialog.

Diberikan di bawah ini adalah kode XAML di mana dua tombol dan a text box dibuat.

<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>

Diberikan di bawah ini adalah kode C # untuk implementasi peristiwa klik di mana file dibuka dan disimpan.

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(); 
               } 
            } 
         }  
      } 
   } 
}

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat halaman web berikut, yang berisi dua tombol.

Klik Open tombol, yang akan terbuka OpenFileDialog untuk memilih file teks.

Pilih file teks dan klik Open, Anda akan melihat teks di kotak teks.

Untuk menyimpan teks ke file, perbarui teks.

Klik Save tombol untuk menyimpan perubahan ke file teks baru atau file yang sudah ada.

Untuk menyimpan perubahan ke file teks yang ada, pilih file teks di SaveFileDialog, tetapi jika Anda ingin menyimpan perubahan ke file baru, tulis nama file dan klik Save tombol.