2014-02-08 5 views
0

Я сталкиваюсь с этой ошибкой каждый раз, когда хочу записать файл в папку.Доступ к пути 'xxxxxxxxx' отрицается

Вот мой код:

protected void ListAttachments(List<MessagePart> msgParts) 
    { 
     bool attachmentsFound = false; 
     StringBuilder b = new StringBuilder(); 
     b.Append("<ol>"); 
     foreach (MessagePart p in msgParts) 
     { 
      string contentType = p.Headers["Content-Type"]; 
      string contentDisposition = p.Headers["Content-Disposition"]; 
      Match m; 
      if (contentDisposition != null) 
      { 
       m = FilenameRegex.Match(contentDisposition); 
       if (m.Success) 
       { 
        attachmentsFound = true; 
        b.Append("<li><a href='Handler.ashx?fileName=" + m.Groups["filename"].Value + "'>").Append(m.Groups["filename"].Value).Append("</a></li>"); 
        Response.AppendHeader("content-disposition", "attachment; filename=" + m.Groups["filename"].Value); 
        Response.ContentType = "application/octet-stream"; 
        //Error Occurs 
        Response.TransmitFile(Server.MapPath(@"~/Files")); 
        Response.End(); 
       } 
      } 
      else if (contentType != null) 
      { 
       m = NameRegex.Match(contentType); 
       if (m.Success) 
       { 
        attachmentsFound = true; 
        b.Append("<li><a href='Handler.ashx?fileName="+m.Groups["filename"].Value+"'>").Append(m.Groups["filename"].Value).Append("</a></li>"); 
       } 
      } 
     } 
     b.Append("</ol>"); 
     if (attachmentsFound) 
      AttachmentsLiteral.Text = b.ToString(); 
     else 
      AttachementsRow.Visible = false; 
    } 

Здесь ошибка возникает, как Access to the path 'F:\Gmail\Files' is denied.

Это информация об ошибке:

Server Error in '/Gmail' Application. 

Access to the path 'F:\Gmail\Files' is denied. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.UnauthorizedAccessException: Access to the path 'F:\Gmail\Files' is denied. 

ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if the application is not impersonating. If the application is impersonating via <identity impersonate="true"/>, the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. 

To grant ASP.NET access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access. 

Source Error: 


Line 160:     Response.AppendHeader("content-disposition", "attachment; filename=" + m.Groups["filename"].Value); 
Line 161:     Response.ContentType = "application/octet-stream"; 
Line 162:     Response.TransmitFile(Server.MapPath(@"~/Files")); 
Line 163:     Response.End(); 
Line 164:    } 

Source File: f:\Gmail\DisplayPop3Email.aspx.cs Line: 162 

Stack Trace: 


[UnauthorizedAccessException: Access to the path 'F:\Gmail\Files' is denied.] 
    System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +7712175 
    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) +1162 
    System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +66 
    System.Web.HttpResponse.TransmitFile(String filename, Int64 offset, Int64 length) +134 
    System.Web.HttpResponse.TransmitFile(String filename) +12 
    DisplayPop3Email.ListAttachments(List`1 msgParts) in f:\Gmail\DisplayPop3Email.aspx.cs:162 
    DisplayPop3Email.Page_Load(Object sender, EventArgs e) in f:\Gmail\DisplayPop3Email.aspx.cs:90 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +50 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 

Скажите, пожалуйста, как я могу исправить это ....

ответ

1

Это было некоторое время, так как я работал на ASP.NET, но я буду сделайте снимок этого ответа. Во-первых, ошибка довольно очевидна: учетная запись пользователя, возможно, учетная запись службы NETWORK, в контексте которой выполняются процессы ASP.NET, не имеет доступа к каталогу F: \ Gmail \ Files.

Пожалуйста, обратитесь к this link, который должен дать вам указатель на то, как продвигаться вперед - скорее, он детализирует шаги, предпринятые для обеспечения того, чтобы процессы ASP.NET могли писать/читать файлы на диске, не создавая проблемы безопасности.

Также ссылайтесь на приведенные ниже ссылки, чтобы узнать больше о What is new in ASP.NET Data access (статья применима к ASP.NET 3.0) и ASP.NET required Access Control Lists.

Надеюсь, это даст вам возможность решить текущую проблему, перед которой вы столкнулись.

Смежные вопросы