System.IO.FileInfo - отказано в доступе к локальному файлу. - PullRequest
1 голос
/ 13 августа 2010

Я создал образец веб-проекта Silverlight

и получаю сообщение «Отказано в доступе», когда я делаю это:

string fileName = "map.gif";
FileInfo fileInfo = new FileInfo(fileName);

Как я могу предоставить веб-проекту доступ к этой папке/ file?

Я добавил изображение в свой проект, действительно рисуя здесь пробел ....

Ответы [ 5 ]

1 голос
/ 13 августа 2010

Вы не получаете доступ к файлам, которые вы поместили в проект, используя объект FileInfo. Вместо этого вы создаете Uri для доступа к нему.

Из вашего вопроса неясно, в какой проект вы поместили файл. Если вы поместили его в проект Silverlight, то он должен оказаться в Xap как контент. В этом случае вы можете приобрести StreamResourceInfo для него, используя: -

StreamResourceInfo gifContentInfo = Application.GetResourceStream(new Uri("map.gif", UriKind.Relative));

Теперь вы можете получить доступ к содержимому файла с помощью: -

Stream gifStream = gifContentInfo.Stream;

С другой стороны, если вы разместили файл в веб-проекте, он будет стандартным статическим файлом на веб-сайте. Следовательно, вам нужно будет сделать типичную загрузку WebClient, чтобы получить ее.

Я так понимаю, вы идете к этой проблеме, потому что это файл Gif; вы знаете, что они не поддерживаются как изображения.

0 голосов
/ 14 августа 2010

@ Лукас ..

Хорошо. Вы можете использовать Silverlight 4. Взгляните на this . и это

0 голосов
/ 14 августа 2010

Я предполагаю, что вы пытаетесь получить доступ к файлу в локальной файловой системе.

Если это так, вы не можете получить доступ к таким файлам.Silverlight не имеет привилегий доступа, которые вы ожидаете.Если вы хотите добавить файл в приложение Silverlight во время выполнения.Вам понадобится Silverlight 4, работающий вне браузера с повышенными привилегиями.Есть определенные ограничения в этом тоже.Вы можете получить доступ к файлам только в специальных папках, таких как «Мои документы», «Изображения», «Музыка» и т. Д. Для получения дополнительной информации о доступе к файлам таким способом.Вы можете посмотреть руководства Джона о повышенных привилегиях Silverlight 4 в MSDN 9-го канала.

Я бы тоже сомневался в использовании FileInfo.Вот пример кода для получения данных файла с помощью простой функции перетаскивания.

private void list_Drop(object sender, DragEventArgs e)
{
  FileInfo[] files = (FileInfo[])e.Data.GetData(DataFormats.FileDrop);

  for(int i=0;i<files.Length;i++)
  textblock.Text += files[i].Name;
}

Вы можете получить свойства файла, такие как «Имя».Вы не попадете ни в какие ошибки в доступе.Вы не можете получить доступ к таким свойствам, как «DirectoryName», «FullName» и т. Д. Причина в том, что они объявлены как SecurityCritical свойства по соображениям безопасности.Преимущество повышенных разрешений заключается в том, что вы можете получить доступ к локальной файловой системе (специальным папкам) для доступа к свойствам FullName и DirectoryName без каких-либо исключений.

Надеюсь, это поможет

0 голосов
/ 13 августа 2010

вам нужно предоставить доступ к файлу пользователю asp.net

проверить это: http://www.codeproject.com/KB/aspnet/Ahmed_Kader.aspx

Или используйте специальную папку, которую asp.net предоставляет для вас ... APP_DATA

который должен иметь необходимые вам права ...

0 голосов
/ 13 августа 2010

Вы не можете использовать файловую систему в Silverlight за пределами Изолированное хранилище

...