- Silverlight 教程
- Silverlight - 主页
- Silverlight - 概述
- Silverlight - 环境设置
- Silverlight - 入门
- Silverlight - XAML 概述
- Silverlight - 项目类型
- Silverlight - 固定布局
- Silverlight - 动态布局
- 受约束与无约束
- Silverlight-CSS
- Silverlight - 控件
- Silverlight - 按钮
- Silverlight - 内容模型
- Silverlight - 列表框
- 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类的一个实例。
调用ShowDialog,使其出现,返回代码告诉我们用户是否选择了保存文件的位置,或取消了对话框。
您可能想知道与True 的看起来多余的比较。如果ShowDialog返回True值,则表示用户已经选择了一个文件。因此我们可以继续调用OpenFile方法,该方法返回一个Stream。
如果我们愿意,我们可以发现用户选择的名称。该对话框提供了一个名为SafeFileName 的属性,但不包括路径。无论如何,写入数据的唯一方法是使用对话框返回的Stream 。从开发人员的角度来看,这只是一个普通的.NET流,因此我们可以将其包装在StreamWriter中,以将文本写入其中。
打开文件对话框
OpenFileDialog 的使用与SaveFileDialog类似。显然,您总是选择现有文件而不是新文件,但还有另一个重要区别。
它提供了一个名为MultiSelect的属性。如果将其设置为True,用户可以选择多个文件。这意味着该对话框需要稍微复杂一些的 API。
SaveFileDialog一次只能处理一个文件,但OpenFileDialog能够处理更多文件,因此它不提供OpenFile方法。我们需要扩展代码。根据对话框是处于单文件模式还是多选模式,您可以使用其File或Files属性。
在下面给出的示例中,我们处于单文件模式。因此,我们使用File ,并对返回的FileInfo对象调用OpenRead。
在多选模式下,我们将使用Files ,它返回FileInfo对象的集合。
文件流
上面提到的第二种文件访问方法是直接使用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中选择文本文件,但如果要将更改保存到新文件,请写入文件名并单击“保存”按钮。