System.IO.FileInfo抛出访问被拒绝本地文件的异常

时间:2010-08-13 17:09:08

标签: silverlight filestream .net

我创建了一个示例Silverlight Web项目

当我这样做时,我得到'访问被拒绝':

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

如何让web项目访问此文件夹/文件?

我将图片添加到我的项目中,真的在这里画了一个空白....

5 个答案:

答案 0 :(得分:1)

您不使用FileInfo对象访问已放置在项目中的文件。而是创建一个Uri来访问它。

从您的问题中不清楚您将文件放在哪个项目中。如果您已将其放在Silverlight项目中,那么它应该最终作为Xap中的内容。在这种情况下,您可以使用以下方式获取StreamResourceInfo: -

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

现在您可以通过以下方式访问文件内容: -

Stream gifStream = gifContentInfo.Stream;

另一方面,如果您将文件放在Web项目中,它将是网站中的标准静态文件。因此,您需要执行典型的WebClient下载才能获取它。

我认为你要解决这个问题,因为它是一个Gif文件;您知道它们不支持图像。

答案 1 :(得分:0)

您不能在Isolated Storage

之外的Silverlight中使用文件系统

答案 2 :(得分:0)

您需要授予对asp.net用户的文件访问权限

检查一下: http://www.codeproject.com/KB/aspnet/Ahmed_Kader.aspx

或者使用asp.net为您提供的特殊文件夹 ... APP_DATA

应该拥有你需要的权利......

答案 3 :(得分:0)

我假设您正在尝试访问本地文件系统中的文件。

如果是这样,您无法访问此类文件。 Silverlight没有您期望的访问权限。如果要在运行时将文件添加到Silverlight应用程序。您将需要Silverlight 4,在浏览器中运行具有提升的priveleges。这也有一定的局限性。您只能访问特殊文件夹中的文件,如我的文档,图片,音乐等。有关访问文件的更多信息。您可以在第9频道MSDN中查看Silverlight 4提升版的John's tutorials

我也怀疑你的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属性,而没有任何例外。

希望这有帮助

答案 4 :(得分:0)

@Lucas ..

好。您可以使用Silverlight 4.查看this。和this