Silverlight實例教程 Out of Browser存取本地文件系統(tǒng) -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【clearvueentertainment.com - 電腦資料】

在前文,我們講述了Silverlight Out of Browser的基礎(chǔ)以及自定義模式應(yīng)用 ,

Silverlight實例教程 Out of Browser存取本地文件系統(tǒng)

。本篇,我們將講述Silverlight Out of Browser應(yīng)用的重點 - 創(chuàng)建可信任應(yīng)用 ,也稱為Trusted Application. 早在Silverlight 3,Silverlight Out of Browser的功能由于權(quán)限的限制無法很好的滿足用戶的正常存取需求,僅能實現(xiàn)將 Web應(yīng)用脫離瀏覽器。而在Silverlight 4中,通過提升應(yīng)用信任權(quán)限,大大增強 了Silverlight Out of Browser的功能,在權(quán)限允許的情況下,用戶可以自由有 訪問本地目錄,也可以執(zhí)行本地應(yīng)用程序,另外通過調(diào)用COM組件,實現(xiàn)更多更強 大的本地應(yīng)用操作。下面我們將實例講述Silverlight Out of Browser可信任應(yīng) 用 - 存取本地文件系統(tǒng)。

本篇中,我們將基于上篇教程提供的項目SilverlightOOBDemo進行演示操作。

首先需要確認SilverlightOOBDemo項目允許用戶提升應(yīng)用信任權(quán)限。這樣, OOB應(yīng)用將被允許訪問用戶本地資源。

Silverlight 4對于本地文件夾的存取,并非代表存取所有本地磁盤目錄,目 前為止,Silverlight 4 API僅支持存取“我的文檔”,“我的音樂”,“我的圖片 ”和“我的視頻”目錄以及“Program Files”和“Cookies”目錄,而如果想對 所有磁盤目錄進行訪問,則需要使用COM功能進行操作,我們將在下篇講述,本篇 將著重講述 Silverlight 4 API對“我的”系列目錄的操作方法。

在實現(xiàn)具體功能前,首先需要為項目添加兩個新文件,一個是資源文件 Resources.xaml,該資源文件引用自開源控件BlackLight資源樣式,主要目的是 為了創(chuàng)建新按鈕演示效果,如下圖:

另一個是小圖片控件ThumbImage.xaml,該文件是用于載入“我的圖片”目錄后 的圖片略縮圖,其代碼較為簡單,

1  2      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5      xmlns:mc="http://schemas.openxmlformats.org/markup- compatibility/2006"
6     mc:Ignorable="d"
7      d:DesignHeight="300" d:DesignWidth="400">
8
9     
10         
11     
12 

1 namespace SilverlightOOBDemo
2 {
3     public  partial class ThumbImage : UserControl
4     {
5          private Image _OriginalImage;
6          public Image OriginalImage 
7         { 
8              get 
9             {
10                  return _OriginalImage; 
11              } 
12             set 
13              {
14                 this._OriginalImage  = value;
15                  ThumbnailImage.Source = new WriteableBitmap(_OriginalImage, null);  
16             } 
17         }
18
19         public ThumbImage()
20          {
21             InitializeComponent();
22          }
23     }
24 }

為了能夠激活存取事件,我們需要在OutofBrowserMainpage主窗口頁面添加按 鈕控件,其樣式調(diào)用自資源文件Resources.xaml,對于資源樣式調(diào)用,這里不再 贅述,如果不明白的,請看“Expression Blend實例中文教程系列文章”

1 
2                          
3                              
4                                  
5                                      
6                                          
7                                              
8                                                   
9                                                  
10                                               

11                                          

12                                      
13                                  

14
15                              
16                          
17
18                          
19                              
20                                  
21                                      
22                                          
23                                               
24                                                  
25                                                  
26                                               

27                                          

28                                      
29                                  

30                              
31                          
32                      

同時,為了能夠載入本地“我的圖片”目錄中的圖片文件,我們需要在 OutofBrowserMainpage中使用一個ListBox控件,載入上面我們創(chuàng)建的ThumbImage 控件來顯示,所有圖片略縮圖列表,

1 

現(xiàn)在,我們可以為openfilebtn按鈕控件創(chuàng)建事件,使其響應(yīng)用戶操作,打開 對應(yīng)目錄進行文件瀏覽

1         private void openFileBtn_Click(object  sender, RoutedEventArgs e)
2         {
3              if (Application.Current.HasElevatedPermissions)
4              {
5                 var  imageFiles = Directory.EnumerateFiles(Environment.GetFolderPath (Environment.SpecialFolder.MyPictures), "*.jpg",  SearchOption.AllDirectories);
6                  foreach (var imagePath in imageFiles)
7                  {
8                      AddImageToList(new FileInfo(imagePath));
9                  }
10             }
11         }

在上面代碼中,如果用戶已經(jīng)提升了OOB應(yīng)用權(quán)限 (Application.Current.HasElevatedPermissions),將通過Environment中的 GetFolderPath方法獲取到本地“My..”目錄下的文件,其中 Environment.SpecialFolder可以設(shè)定特殊目錄,

電腦資料

Silverlight實例教程 Out of Browser存取本地文件系統(tǒng)》(http://clearvueentertainment.com)。更多詳細,請看MSDN解釋。

在上面代碼中,有一個方法AddImageToList,將文件路徑信息讀取,然后將圖 片文件信息進行綁定到ListBox。

1         private void AddImageToList(FileInfo  fileinfo)
2         {
3              FileStream fileStream = fileinfo.OpenRead();
4              Image img = new Image();
5              BitmapImage bi = new BitmapImage();
6              bi.SetSource(fileStream);
7             img.Margin =  new Thickness(5d);
8             img.Stretch =  Stretch.UniformToFill;
9             img.Source =  bi;
10             try { img.Tag =  fileinfo.FullName; }
11             catch { }
12              ThumbImage thumbnail = new ThumbImage ();
13             thumbnail.OriginalImage =  img;
14             lsMyPictures.Items.Add (thumbnail);
15         }

在讀取“我的圖片”目錄信息后,將各個圖片載入到ThumbImage控件中,然后 使用ListBox承載各個圖片,這樣也就完成了OOB應(yīng)用對本地目錄的瀏覽。其效果 如下:

通過以上的代碼,我們可以快速修改,瀏覽“我的文檔”,“我的音樂”和“ 我的視頻”等目錄;在OutofBrowserMainPage頁面添加代碼:

1 

1 private void AddDocToList()
2         {
3              var path = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
4              lsMyDocuments.ItemsSource = System.IO.Directory.EnumerateFiles (path);
5         }

然后在openFileBtn_Click事件中調(diào)用AddDocToList();即可獲取到“我的文檔 ”文件列表, 其他目錄與其類似,就不再做代碼演示,大家可以自己嘗試,如果 遇到問題,我們可以一起討論 。

看到這里,有的朋友可能會問,既然已經(jīng)可以實現(xiàn)瀏覽本地目錄功能,是不是 也應(yīng)該可以對本地目錄文件進行操作呢?答案是肯定的。當(dāng)OOB應(yīng)用獲取到權(quán)限提 升后,則可以使用File類對文件進行操作,例如,移動文件,刪除文件等。對目 前的項目我們進行簡單的修改,演示如何將“我的文檔”目錄的文件 ,移動到“我的音樂”目錄中,并且刪除源目錄的相同文件,

首先在OutofBrowserMainPage.xaml頁面添加一個新的ListBox,承載“ 我的音樂”目錄文件;

1 
2                                      
3                                      
4                                  

在后臺代碼添加,瀏覽載入“我的音樂”目錄;

1 private void AddMusicToList()
2          {
3             var path =  Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
4              lsMyMusics.Items.Clear();
5              DirectoryInfo myDirectory = new DirectoryInfo(path);
6              foreach (FileInfo file in  myDirectory.EnumerateFiles())
7             {
8                  lsMyMusics.Items.Add(file);
9              }
10         }

簡單修改“我的文檔”ListBox代碼,和后臺代碼:

1 
2                                      
3                                      
4                                  

1 private void AddDocToList()
2         {
3              var path = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
4              lsMyDocuments.Items.Clear();
5              DirectoryInfo myDirectory = new DirectoryInfo(path);
6              foreach (FileInfo file in  myDirectory.EnumerateFiles())
7             {
8                  lsMyDocuments.Items.Add(file);
9              }
10              //lsMyDocuments.ItemsSource = System.IO.Directory.EnumerateFiles (path);
11         }

運行后即可得到如下效果:

下面我們想實現(xiàn),點擊按鈕事件后,將“我的文檔”目錄中的選中文件,移動 到“我的音樂”目錄中,

首先,在應(yīng)用的ToolBar中添加一個移動按鈕moveFileBtn

實現(xiàn)moveFileBtn被點擊后,移動文件到“我的音樂”目錄,

1 private void moveFileBtn_Click(object sender,  RoutedEventArgs e)
2         {
3              FileInfo selectedFile = (FileInfo) lsMyDocuments.SelectedValue;
4             string path  = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
5              string formatPath = string.Format("{0} \\{1}", path, selectedFile.Name);
6             if  (!File.Exists(formatPath))
7             {
8                  File.Move(selectedFile.FullName,  formatPath);
9                 File.Delete (selectedFile.FullName);
10             }
11              LoadFiles();
12         }
13
14          private void LoadFiles()
15         {
16              AddDocToList();
17              AddMusicToList();
18         }

這里我們用的是最基本的File文件類操作文件的移動和刪除,當(dāng)然,這需要 OOB應(yīng)用被提升信任權(quán)限后,才可以操作,否則,將提示權(quán)限錯誤。

這樣,我們就可以查看演示了,當(dāng)運行應(yīng)用后,“我的文檔”和“我的音樂” 兩個目錄將被載入文件列表,選中“我的文檔”中任一文件,然后點擊“移動” 按鈕,就會發(fā)現(xiàn)該文件被移動到“我的音樂”目錄中,而在“我的文檔”中的源 文件已經(jīng)被刪除。

通過上文,我們可以了解到Silverlight Out of Browser的可信任應(yīng)用對本地 目錄和文件的操作方法以及基本API的用法,下一篇,我們將通過另外一個實例演 示更多Out of Browser的可信任應(yīng)用的強大功能。

注:本篇部分代碼是參考Silverlight開源項目。

本文配套源碼

最新文章