好的,所以我相信我在这里做的很容易。我编写了一个ASP.NET网页,它只是试图写入本地目录。
我使用以下代码:
System.IO.File.WriteAllLines("log.txt", messages);
我抛出以下异常。
Access to the path 'c:\windows\system32\inetsrv\log.txt' is denied.
我的ASP.NET应用程序位于以下目录中。
c:\inetpub\wwwroot\sites\mysite\
所以当我不提供该目录时,我很困惑为什么它试图写入c:\ windows \ system32 \ inetsrv \目录。
我已尝试将代码更改为以下内容,但它为我提供了与新目录相同的错误消息。
System.IO.File.WriteAllLines("c:\\inetpub\\wwwroot\\sites\mysite\log.txt", messages);
修改1
很难接受这方面的答案,因为每个人都真的帮了我一大堆。我接受了tom_yes_tom的答案,因为他是第一个发布他的回答的人,这是我问题的前半部分。我的另一半问题与法布里奥指出的hbrock解决方案有关。
答案 0 :(得分:7)
创建文件夹“C:\ inetpub \ wwwroot \ sites \ mysite \ App_Data”并将数据保存在那里。
System.IO.File.WriteAllLines(Server.MapPath("~/App_Data/log.txt"))
如果您必须将其保存到mysite目录,请注意将日志文件放在那里并适当设置目录权限的安全后果。运行IIS的用户需要能够读写该目录。
完全符合条件的路径:System.Web.HttpContext.Current.Server
答案 1 :(得分:3)
您正在接收“访问路径'c:\ windows \ system32 \ inetsrv \ log.txt'被拒绝。”当您执行System.IO.File.WriteAllLines(“log.txt”,messages)时,因为c:\ windows \ system32 \ inetsrv是IIS可执行文件所在的目录(w3wp.exe)。
您必须使用Server.MapPath,以便为您提供虚拟目录的物理路径。
查看哪个用户正在运行虚拟目录的应用程序池,并授予他对虚拟目录文件夹的写入权限。
答案 2 :(得分:1)
这应该有所帮助:
授予对特定文件的读取,写入和修改权限
在Windows资源管理器中,找到并选择所需的文件。
右键单击该文件,然后单击“属性”。
在“属性”对话框中,单击“安全”选项卡。
在“安全”选项卡上,检查用户列表。如果未列出网络服务帐户,请将其添加。
在“属性”对话框中,单击“网络服务”用户名,然后在“网络服务权限”部分中,选择“读取”,“写入”和“修改”权限。
单击“应用”,然后单击“确定”
来自http://msdn.microsoft.com/en-us/library/ff647402.aspx#paght000015_fileaccess
的信息