6

好的,所以我相信我在这里做的事情很容易。我写了一个 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 的回答,因为他是第一个发表他的回复的人,这是我问题的前半部分。我的问题的另一半与 Fabio 指出的 hbrock 的解决方案有关。

4

3 回答 3

6

创建文件夹“C:\inetpub\wwwroot\sites\mysite\App_Data”并将您的数据保存在那里。

System.IO.File.WriteAllLines(Server.MapPath("~/App_Data/log.txt"))

如果您绝对必须将其保存到 mysite 目录,请注意将日志文件放在那里并适当设置目录权限的安全后果。运行 IIS 的用户需要能够读取和写入该目录。

完整的合格路径:System.Web.HttpContext.Current.Server

于 2012-09-12T17:43:40.960 回答
3

您收到“对路径 'c:\windows\system32\inetsrv\log.txt' 的访问被拒绝”。当您执行 System.IO.File.WriteAllLines("log.txt", messages) 时,因为 c:\windows\system32\inetsrv 是 IIS 可执行文件所在的目录 (w3wp.exe)。

您必须使用 Server.MapPath 以便它为您提供虚拟目录的物理路径。

查看哪个用户正在运行您的虚拟目录的应用程序池,并授予他对您的虚拟目录文件夹的写入权限。

于 2012-09-12T18:03:47.903 回答
1

这应该有助于:

授予对特定文件的读取、写入和修改权限

在 Windows 资源管理器中,找到并选择所需的文件。

右键单击该文件,然后单击“属性”。

在“属性”对话框中,单击“安全”选项卡。

在安全选项卡上,检查用户列表。如果未列出网络服务帐户,请添加它。

在“属性”对话框中,单击“网络服务”用户名,然后在“网络服务的权限”部分中,选择“读取”、“写入”和“修改”权限。

单击应用,然后单击确定

信息来自:http: //msdn.microsoft.com/en-us/library/ff647402.aspx#paght000015_fileaccess

于 2012-09-12T17:57:58.890 回答