- Silverlight 教程
- Silverlight - 首頁
- Silverlight - 概述
- Silverlight - 環境設定
- Silverlight - 入門
- Silverlight - XAML 概述
- Silverlight - 專案型別
- Silverlight - 固定佈局
- Silverlight - 動態佈局
- 受約束與不受約束
- Silverlight - CSS
- Silverlight - 控制元件
- Silverlight - 按鈕
- Silverlight - 內容模型
- Silverlight - ListBox
- Silverlight - 模板
- Silverlight - 可視狀態
- Silverlight - 資料繫結
- Silverlight - 瀏覽器整合
- Silverlight - 瀏覽器外
- Silverlight - 應用程式和資源
- Silverlight - 檔案訪問
- Silverlight - 檢視模型
- Silverlight - 輸入處理
- Silverlight - 隔離儲存
- Silverlight - 文字
- Silverlight - 動畫
- Silverlight - 影片和音訊
- Silverlight - 列印
- Silverlight 有用資源
- Silverlight - 快速指南
- Silverlight - 有用資源
- Silverlight - 討論
Silverlight - 檔案訪問
在本節中,我們將瞭解 Silverlight 應用程式如何訪問終端使用者計算機上的檔案。Silverlight 中有三種主要方法可以訪問檔案。選擇哪種方法將取決於您需要使用檔案的原因,以及您是否正在編寫受信任的應用程式。
最靈活的選項是使用檔案對話方塊類。使用開啟和儲存檔案對話方塊,您可以訪問終端使用者選擇的任何檔案,只要使用者具有相應的許可權即可。使用者同意是此方法的核心。使用者必須選擇要讀取的檔案,或者在儲存時,他們選擇要覆蓋的檔案或為您選擇一個位置和檔名。
第二個選項是使用System.IO名稱空間中的各種類。Silverlight 提供了諸如FileStream、StreamWriter、FileInfo、Directory和DirectoryInfo之類的類,所有這些類都使得編寫開啟和訪問檔案而無需使用者參與的程式碼成為可能。這對於開發人員來說可能更方便,但當然,大多數使用者不希望任何舊程式碼作為網頁的一部分下載後能夠在其檔案中搜索。
第三個選項是隔離儲存,我們將在後面討論。
開啟和儲存檔案對話方塊
SaveFileDialog
SaveFileDialog類顯示標準作業系統提供的使用者介面,用於選擇檔案儲存位置。
一些重要的功能包括:
要使用它,我們建立SaveFileDialog類的例項。
呼叫ShowDialog會使其出現,返回值告訴我們使用者是否選擇了檔案儲存位置或取消了對話方塊。
您可能想知道那裡與True進行冗餘比較的原因。如果ShowDialog返回True值,這意味著使用者已選擇了一個檔案。因此,我們可以繼續呼叫OpenFile方法,該方法返回一個Stream。
如果需要,我們可以發現使用者選擇的檔名。對話方塊提供了一個名為SafeFileName的屬性,但該屬性不包含路徑。無論如何,寫入資料的唯一方法是使用對話方塊返回的Stream。從開發人員的角度來看,這只是一個普通的.NET流,因此我們可以將其包裝在StreamWriter中,以將文字寫入其中。
OpenFileDialog
OpenFileDialog在使用上類似於SaveFileDialog。顯然,您始終選擇現有檔案而不是新檔案,但還有另一個重要區別。
它提供了一個名為MultiSelect的屬性。如果將其設定為True,則使用者可以選擇多個檔案。這意味著對話方塊需要稍微複雜一些的API。
SaveFileDialog一次只處理一個檔案,但OpenFileDialog能夠處理更多檔案,因此它不提供OpenFile方法。我們需要擴充套件程式碼。根據對話方塊是處於單檔案模式還是MultiSelect模式,您可以使用其File或Files屬性。
這裡,在下面給出的示例中,我們處於單檔案模式。因此,我們使用File,並對返回的FileInfo物件呼叫OpenRead。
在多選模式下,我們將使用Files代替,它返回一個FileInfo物件的集合。
FileStream
如上所述,訪問檔案的第二種方法是直接使用FileStream類或System.IO名稱空間中的相關型別。對此沒有太多可說的,因為在大多數情況下,它類似於使用完整.NET Framework進行檔案訪問。
但是,有一些 Silverlight 特定的變化。
首先,這種方法允許您在任何時間訪問檔案,無需使用者干預,也無需任何明顯的可見檔案活動指示,只有受信任的應用程式才能使用此技術。請記住,您需要在瀏覽器外執行才能獲得提升的信任。
第二個問題是,只有某些特定資料夾中的檔案可用。您只能讀取和寫入位於使用者的文件、音樂、圖片或影片檔案下的檔案。這樣做的原因之一是 Silverlight 在多個平臺上執行,並且例如 Apple Mac 的檔案系統結構與 Windows 的檔案系統結構非常不同。因此,跨平臺檔案訪問必須根據所有 Silverlight 支援的系統上都可用的有限資料夾集來工作。
由於這些資料夾在不同的作業系統上位於不同的位置,並且它們的位置通常因使用者而異,因此您需要使用Environment.GetFolderPath方法在執行時發現實際位置。
您可以檢查起始點下方的目錄結構。System.IO名稱空間中的Directory和DirectoryInfo類允許您列舉檔案和目錄。
考慮一個簡單的示例,其中檔案可以透過OpenFileDialog開啟,並透過SaveFileDialog將一些文字儲存到該檔案。
下面是 XAML 程式碼,其中建立了兩個按鈕和一個文字框。
<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>
下面是 C# 程式碼,用於實現點選事件,其中檔案被開啟和儲存。
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();
}
}
}
}
}
}
當上述程式碼被編譯並執行時,您將看到以下網頁,其中包含兩個按鈕。
點選開啟按鈕,將開啟OpenFileDialog以選擇文字檔案。
選擇一個文字檔案並點選開啟,您將在文字框中看到文字。
要將文字儲存到檔案,請更新文字。
點選儲存按鈕將更改儲存到新文字檔案或現有檔案。
要將更改儲存到現有的文字檔案,請在SaveFileDialog中選擇該文字檔案,但如果要將更改儲存到新檔案,請寫入檔名並點選儲存按鈕。