Question

I'm facing this error every time I want to write file to folder.

Here is my code:

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;
    }

Here error occurs like Access to the path 'F:\Gmail\Files' is denied.

This is error details:

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

Please tell me how I can fix it up....

Was it helpful?

Solution

It has been some time since I have worked on ASP.NET, but I will take a shot at this answer. Firstly, the error is pretty obvious - the user account possibly the NETWORK service account under whose context the ASP.NET processes are executing do not have access to the directory F:\Gmail\Files.

Please refer to this link that should give you a pointer on how to go forward - rather it details the steps to taken in order to ensure that ASP.NET processes can write/read disk files without posing a security concern.

Also refer to the below links to learn more about What is new in ASP.NET Data access (article applies to ASP.NET 3.0) and ASP.NET required Access Control Lists.

Hope this gives a step to solve the current problem you are facing

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top