Как читать текст из текстового файла в XAP? - PullRequest
4 голосов
/ 18 февраля 2011

Я работаю над программой Silverlight вне браузера, и я успешно получил ее для открытия локальных файлов с помощью OpenFileDialog.Тем не менее, теперь мне нужно, чтобы открыть файл изнутри его собственного XAP (просмотр не требуется, файл для открытия жестко запрограммирован).Я пытаюсь использовать этот код, но он не работает:

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

Этот код выдает SecurityException с сообщением «Операция с файлом запрещена. Доступ к пути« Default.txt »запрещен».Что я делаю не так?

1 Ответ

9 голосов
/ 18 февраля 2011

Ваш код пытается открыть файл с именем «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 имеет несколько сборок, проверьте, что часть "/ MyXap" UriСтрока ссылается на имя сборки, содержащей ресурс.Например, если у вас есть две сборки «ProjectName» и «ProjectName.Screens», где «ProjectName.Screens» содержит ваш ресурс, используйте следующее:

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