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

Anjali Agarwal 1,611 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.

Developer technologies | .NET | Other
Developer technologies | ASP.NET Core | Other
0 comments No comments

Answer accepted by question author
Anonymous
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

Was this answer helpful?

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' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.