2011-02-18 54 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