我试图保存一个图像到。net c#的文件夹,但我得到这个异常:

Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)

我完全控制了这个文件夹(savehere)到网络服务和iis_iusrs,甚至完全控制了每个人,但仍然得到这个异常。 我尝试通过浏览器和IIS管理器访问,仍然没有运气

我是在Windows server 2008 R2和IIS 7.5上做的,我需要给谁访问权限?


当前回答

我遇到了很多麻烦,特别是与我的代码在本地运行有关,但当我需要在IIS上运行它时,它抛出了这个错误。我发现,在我的代码中添加一个检查,并让应用程序在第一次运行时创建文件夹,就可以解决这个问题,而不必打乱文件夹的授权。

在调用使用文件夹的方法之前

bool exists = System.IO.Directory.Exists("mypath");

        if (!exists)
            System.IO.Directory.CreateDirectory("mypath");

其他回答

我在本地工作站上开发时遇到了这个问题。

在几次不成功的iisreset调用之后,我通过重新启动我的机器来纠正这种情况。

回顾一下,打开的文件句柄可能会导致问题。

有一个与我试图写的文件同名的目录,所以人们也可以找到它。

下面的技巧并不是这个帖子最初问题的答案,但可能会帮助其他一些用户在犯了和我一样的愚蠢错误后,最终进入这个网页……

我是想搞个ASP。Net FileUpload控件将文件上传到包含“隐藏共享”的网络地址,即:

\ MyNetworkServer \ \ SomeDirectoryOrOther加元

我不明白。如果我在Visual Studio的调试模式下运行网页,它会工作得很好。但是当项目被部署并通过应用程序池用户运行时,它拒绝找到这个网络目录。

我已经检查了我的IIS站点在哪个用户下运行,给了这个用户在“MyNetworkServer”服务器上的这个目录的完全权限,等等,但什么都不起作用。

原因(当然!)是只有管理员能够“看到”这些隐藏的驱动器共享。

我的解决方案是简单地创建一个“正常的”共享

MyNetworkServer \ SomeDirectoryOrOther

这样就摆脱了“访问路径…”被拒绝”的错误。日志含义FileUpload能够成功运行该命令

fileUpload.SaveAs(networkFilename);

希望这能帮助到其他和我犯同样错误的用户!

还要注意的是,如果你上传的是大文件(超过4Mb),那么IIS7要求你修改网页。配置文件在两个地方。点击此链接,阅读你需要做的事情: 在ASP中上传大文件。网

您需要添加读写值的访问参数,如下所示

using (var stream = new FileStream(localPath, FileMode.Create, access : FileAccess.ReadWrite))
{
    file.CopyTo(stream);
} 

在我的情况下,我必须在IIS中为网站添加一个. net授权规则。

我添加了一条允许匿名用户的规则。