2011-02-18 89 views
4

我正在使用瀏覽器外的Silverlight程序,並且已成功通過OpenFileDialog打開本地文件。但是,現在我需要它從自己的XAP中打開一個文件(不需要瀏覽,打開的文件是硬編碼的)。我想利用這個代碼,但它不工作:「文件操作不允許訪問路徑‘Default.txt’被拒絕」如何從XAP文本文件中讀取文本?

using (StreamReader reader = new StreamReader("Default.txt")) 
{ 
    TextBox1.Text = reader.ReadToEnd(); 
} 

此代碼拋出一個SecurityException,說我究竟做錯了什麼?

回答

9

您的代碼試圖打開一個名爲「Default.txt」的文件,該文件位於用戶的文件系統中。究竟我不知道,因爲它取決於Silverlight應用程序執行的位置。所以是的,一般來說你沒有權限去那裏。

若要從XAP中提取某些內容,需要以不同的方式構造流。它將沿着這些線:

Stream s = Application.GetResourceStream(
    new Uri("/MyXap;component/Path/To/Default.txt", UriKind.Relative)).Stream; 
StreamReader reader = new StreamReader(s); 

請注意,這意味着您的Default.txt應設置爲'資源',而不是'嵌入式資源'。通過成爲'資源'它將被添加到XAP。嵌入式資源將把它添加到程序集中。

更多信息:http://nerddawg.blogspot.com/2008/03/silverlight-2-demystifying-uri.html

注:在你的Silverlight程序有多個組件,檢查URI字符串的「/ MyXap」部分引用包含資源集的名稱的情況。例如,如果你有兩個組件「項目名」和「ProjectName.Screens」,其中「ProjectName.Screens」包含您的資源,然後使用以下命令:

new Uri("ProjectName.Screens;component/Path/To/Default.txt", UriKind.Relative)) 
+0

設置爲「資源」不被支持,它的加入到xap設置爲「內容。uri然後是」/Path/To/Default.txt「。提供的鏈接說得對。 – John 2013-11-15 14:07:38