我正在开发一个浏览器外的Silverlight程序,我已成功通过OpenFileDialog打开本地文件。但是,现在我需要它从自己的XAP中打开一个文件(无需浏览,打开的文件是硬编码的)。我正在尝试使用此代码,但它不起作用:
using (StreamReader reader = new StreamReader("Default.txt"))
{
TextBox1.Text = reader.ReadToEnd();
}
此代码抛出SecurityException
,表示“不允许文件操作。拒绝访问路径'Default.txt'。”我做错了什么?
答案 0 :(得分: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”和“ProjectName.Screens”,其中“ProjectName.Screens”包含您的资源,请使用以下内容:
new Uri("ProjectName.Screens;component/Path/To/Default.txt", UriKind.Relative))