📜  Silverlight-文件访问

📅  最后修改于: 2020-11-19 08:37:12             🧑  作者: Mango


在本章中,我们将看到Silverlight应用程序如何访问最终用户计算机上的文件。在Silverlight中有三种访问文件的主要方法。选择将取决于您需要使用文件的原因,以及您是否正在编写受信任的应用程序。

  • 最灵活的选项是使用文件对话框类。通过“打开”和“保存文件”对话框,您可以访问最终用户选择的任何文件,只要该用户具有适当的权限即可。用户同意对于这种方法至关重要。用户必须选择要读取的文件,或者在保存时选择要覆盖的文件或为您选择位置和文件名。

  • 第二个选项是使用System.IO命名空间中的各种类。 Silverlight提供了诸如FileStream,StreamWriter,FileInfo,DirectoryDirectoryInfo之类的类,所有这些类都使得编写打开和访问文件的代码成为可能,而无需让用户参与。对于开发人员而言,这可能更方便,但是,当然,大多数用户不希望将任何旧代码下载为网页的一部分,以便能够在其文件中进行搜索。

  • 第三个选项是隔离存储,我们将在后面讨论。

打开和保存文件对话框

保存文件对话框

SaveFileDialog类显示了标准操作系统提供的用于选择文件保存位置的用户界面。

一些重要的功能是-

  • 要使用它,我们创建SaveFileDialog类的实例。

  • 调用ShowDialog ,使它出现,返回代码告诉我们用户是选择保存文件的位置,还是取消对话框。

  • 您可能想知道与True的冗余外观比较。如果ShowDialog返回True值,则表示用户已选择文件。因此,我们可以继续调用OpenFile方法,该方法将向我们返回Stream

  • 如果需要,我们可以发现用户选择的名称。该对话框提供了一个名为SafeFileName的属性,但其中不包含路径。无论如何,写入数据的唯一方法是使用对话框返回的Stream 。从开发人员的角度来看,这只是一个普通的.NET流,因此我们可以将其包装在StreamWriter中,以向其中写入文本。

打开文件对话框

OpenFileDialog的用法与SaveFileDialog相似。显然,您总是选择一个现有文件而不是一个新文件,但是还有另一个重要的区别。

  • 它提供了一个称为MultiSelect的属性。如果将其设置为True ,则用户可以选择多个文件。这意味着对话框需要稍微复杂一些的API。

  • SaveFileDialog一次只能处理一个文件,但是OpenFileDialog可以处理更多文件,因此它不提供OpenFile方法。我们需要扩展代码。根据对话框是单文件模式还是MultiSelect模式,可以使用对话框的FileFiles属性。

  • 在下面的示例中,我们处于单文件模式。因此,我们使用File ,并在返回的FileInfo对象上调用OpenRead

  • 多选模式下,我们将改用Files ,它返回FileInfo对象的集合。

文件流

如上所述,第二种访问文件的方法是直接使用FileStream类或System.IO名称空间中的相关类型。关于这一点,没有太多要说的,因为在很大程度上,它类似于使用完整的.NET Framework进行文件访问。

但是,有一些Silverlight特定的转折。

  • 首先,这种方法使您可以在没有用户干预的情况下随时访问文件,并且没有任何明显的文件活动迹象,仅允许受信任的应用程序使用此技术。请记住,您需要用完浏览器才能获得更高的信任度。

  • 第二个问题是仅某些特定文件夹中的文件可用。您只能读写用户文档,音乐,图片或视频文件下的文件。原因之一是Silverlight可在多个平台上运行,例如Apple Mac的文件系统结构与Windows完全不同。因此,跨平台文件访问必须根据Silverlight支持的所有系统上可用的文件夹的有限集合来工作。

  • 由于这些文件夹将位于不同操作系统上的不同位置,并且它们的位置通常因一个用户而异,因此您需要使用Environment.GetFolderPath方法在运行时发现实际位置。

  • 您可以检查起点下方的目录结构。 System.IO名称空间中的DirectoryDirectoryInfo类使您可以枚举文件和目录。

考虑一个简单的示例,其中可以通过OpenFileDialog打开文件,并通过SaveFileDialog将一些文本保存到文件中。

下面给出的是XAML代码,其中创建了两个按钮和一个文本框

 
   
   
    
       
          
          
      
        
       
                
       
                
       
                
    
    
 

下面给出的是单击事件实现的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”以选择一个文本文件。

打开文件对话框

选择一个文本文件,然后单击“打开” ,您将在文本框中看到文本。

OpenSaveTextFile

要将文本保存到文件,请更新文本。

OpenSaveTextFile

单击保存按钮将更改保存到新文本文件或现有文件。

新文本文件

要将更改保存到现有文本文件,请在SaveFileDialog中选择该文本文件,但是如果要将更改保存到新文件中,请写入文件名,然后单击“保存”按钮。

保存文件对话框