system.IO.Directorynotfoundexception for the file that exists in the network drive

Anjali Agarwal 1,511 Reputation points
2024-12-20T00:48:37.7066667+00:00

I am trying to open and fill a blank .pdf file. This blank .pdf file resides on the network drive. The path to that blank .pdf file is specified in the program.cs file. When I tried to read the blank .pdf file in my code, my code automatically goes to C:\ drive to read that blank .pdf file rather than the network drive. This is what I have in my code:

I have the following code in my program.cs file:

app.UseStaticFiles();
var configValue = builder.Configuration["ConfDestinationPath"];
var blankPDF = builder.Configuration["BlankPDFConfig"];
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(configValue),
    RequestPath = "/testForm" // URL path
});
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(blankPDF),
    RequestPath = "/BlankPDFForm" ,
    // URL path
});

this is what I have in my my appsettings.json file:

"ConfDestinationPath": "\\\\tcs-trs\\shared\\2024\\LanguageForms\\",
"BlankPDFConfig": "\\\\tcs-trs\\shared\\2024\\LanguageForms\\BlankPDFForm\\"

I have the following code in the controller:

string filledPDF = "/testForm/";
string blankPDF = "/BlankPDFForm/"; 
blankPDF = blankPDF + "TestForm.pdf";

Here, when I am trying to read pdf file, TestForm.pdf that resides in the network path, I get an error saying system.IO.Directorynotfoundexception and it looks for the TestForm.pdf file on C:\ drive rather than on this network drive:

\\tcs-trs\shared\2024\LanguageForms\BlankPDFForm\
using (PdfDocument pdf = new PdfDocument(blankPDF)) // I get an error here
{
}

Below is the screen shot of the error:

User's image

I am not sure why code is looking for that balnak pdf file on C:\drive when the file actaully resides on the network drive. I am not sure what am I doing wrong. I specified the network path fully in the program.cs file.

Any help will be apprecaited.

.NET
.NET
Microsoft Technologies based on the .NET software framework.
4,061 questions
ASP.NET Core
ASP.NET Core
A set of technologies in the .NET Framework for building web applications and XML web services.
4,748 questions
0 comments No comments
{count} votes

Accepted answer
  1. JasonPan - MSFT 6,271 Reputation points Microsoft Vendor
    2024-12-20T02:43:20.0533333+00:00

    Hi @Anjali Agarwal

    Please try to access the network drive by using NetworkCredential. Here is the sample code for you.

    Program.cs

    
    ...
    string? confDestinationPath = builder.Configuration["ConfDestinationPath"];
    string? blankPDFPath = builder.Configuration["BlankPDFConfig"];
    var networkCredentials = new NetworkCredential
    {
        Domain = "your_domain", 
        UserName = "your_username", 
        Password = "your_password" 
    };
    using (new NetworkConnection(confDestinationPath, networkCredentials))
    {
        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(confDestinationPath),
            RequestPath = "/testForm"
        });
    }
    using (new NetworkConnection(blankPDFPath, networkCredentials))
    {
        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(blankPDFPath),
            RequestPath = "/BlankPDFForm"
        });
    }
    
    ...
    

    NetworkConnection.cs

    using System.ComponentModel;
    using System.Net;
    using System.Runtime.InteropServices;
    public class NetworkConnection : IDisposable
    {
        string _networkName;
        public NetworkConnection(string networkName,
            NetworkCredential credentials)
        {
            _networkName = networkName;
            var netResource = new NetResource()
            {
                Scope = ResourceScope.GlobalNetwork,
                ResourceType = ResourceType.Disk,
                DisplayType = ResourceDisplaytype.Share,
                RemoteName = networkName
            };
            var userName = string.IsNullOrEmpty(credentials.Domain)
                ? credentials.UserName
                : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);
            var result = WNetAddConnection2(
                netResource,
                credentials.Password,
                userName,
                0);
            if (result != 0)
            {
                throw new Win32Exception(result);
            }
        }
        ~NetworkConnection()
        {
            Dispose(false);
        }
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        protected virtual void Dispose(bool disposing)
        {
            WNetCancelConnection2(_networkName, 0, true);
        }
        [DllImport("mpr.dll")]
        private static extern int WNetAddConnection2(NetResource netResource,
            string password, string username, int flags);
        [DllImport("mpr.dll")]
        private static extern int WNetCancelConnection2(string name, int flags,
            bool force);
    }
    [StructLayout(LayoutKind.Sequential)]
    public class NetResource
    {
        public ResourceScope Scope;
        public ResourceType ResourceType;
        public ResourceDisplaytype DisplayType;
        public int Usage;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string? LocalName;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string? RemoteName;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string? Comment;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string? Provider;
    }
    public enum ResourceScope : int
    {
        Connected = 1,
        GlobalNetwork,
        Remembered,
        Recent,
        Context
    };
    public enum ResourceType : int
    {
        Any = 0,
        Disk = 1,
        Print = 2,
        Reserved = 8,
    }
    public enum ResourceDisplaytype : int
    {
        Generic = 0x0,
        Domain = 0x01,
        Server = 0x02,
        Share = 0x03,
        File = 0x04,
        Group = 0x05,
        Network = 0x06,
        Root = 0x07,
        Shareadmin = 0x08,
        Directory = 0x09,
        Tree = 0x0a,
        Ndscontainer = 0x0b
    }
    

    If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    Best regards,

    Jason

    1 person found this answer helpful.
    0 comments No comments

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.