Description:
In this example we explain that how to access shared
Network drive file using C# code. Or how to access file from remote computer
with providing credential or how to access server file that is hosted on
another network with same domain. Or how to access file on another computer
shared folder. Or access network file using asap.net.or how to provide user
name and password when connecting to a network share in asp.net.
There are many question that how to use network file
that is located in another computer. Below is the code that demonstrate that
how to use the network file with login with credential in remote computer.
First you have to create a NetworkShareAccesser class to validate the user with
credential.
NetworkShareAccesser.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using
System.Runtime.InteropServices;
using
System.ComponentModel;
namespace HTEUtility
{
public class
NetworkShareAccesser : IDisposable
{
private
string _remoteUncName;
private
string _remoteComputerName;
public string RemoteComputerName
{
get
{
return
this._remoteComputerName;
}
set
{
this._remoteComputerName
= value;
this._remoteUncName = @"\\"
+ this._remoteComputerName;
}
}
public string UserName
{
get;
set;
}
public string Password
{
get;
set;
}
#region Consts
private
const int
RESOURCE_CONNECTED = 0x00000001;
private
const int
RESOURCE_GLOBALNET = 0x00000002;
private
const int
RESOURCE_REMEMBERED = 0x00000003;
private
const int
RESOURCETYPE_ANY = 0x00000000;
private
const int
RESOURCETYPE_DISK = 0x00000001;
private
const int
RESOURCETYPE_PRINT = 0x00000002;
private
const int
RESOURCEDISPLAYTYPE_GENERIC = 0x00000000;
private
const int
RESOURCEDISPLAYTYPE_DOMAIN = 0x00000001;
private
const int
RESOURCEDISPLAYTYPE_SERVER = 0x00000002;
private
const int
RESOURCEDISPLAYTYPE_SHARE = 0x00000003;
private
const int
RESOURCEDISPLAYTYPE_FILE = 0x00000004;
private
const int
RESOURCEDISPLAYTYPE_GROUP = 0x00000005;
private
const int
RESOURCEUSAGE_CONNECTABLE = 0x00000001;
private
const int
RESOURCEUSAGE_CONTAINER = 0x00000002;
private
const int
CONNECT_INTERACTIVE = 0x00000008;
private
const int
CONNECT_PROMPT = 0x00000010;
private
const int
CONNECT_REDIRECT = 0x00000080;
private
const int
CONNECT_UPDATE_PROFILE = 0x00000001;
private
const int
CONNECT_COMMANDLINE = 0x00000800;
private
const int
CONNECT_CMD_SAVECRED = 0x00001000;
private
const int
CONNECT_LOCALDRIVE = 0x00000100;
#endregion
#region Errors
private
const int
NO_ERROR = 0;
private
const int
ERROR_ACCESS_DENIED = 5;
private
const int
ERROR_ALREADY_ASSIGNED = 85;
private
const int
ERROR_BAD_DEVICE = 1200;
private
const int
ERROR_BAD_NET_NAME = 67;
private
const int
ERROR_BAD_PROVIDER = 1204;
private
const int
ERROR_CANCELLED = 1223;
private
const int
ERROR_EXTENDED_ERROR = 1208;
private
const int
ERROR_INVALID_ADDRESS = 487;
private
const int
ERROR_INVALID_PARAMETER = 87;
private
const int
ERROR_INVALID_PASSWORD = 1216;
private
const int
ERROR_MORE_DATA = 234;
private
const int
ERROR_NO_MORE_ITEMS = 259;
private
const int
ERROR_NO_NET_OR_BAD_PATH = 1203;
private
const int
ERROR_NO_NETWORK = 1222;
private
const int
ERROR_BAD_PROFILE = 1206;
private
const int
ERROR_CANNOT_OPEN_PROFILE = 1205;
private
const int
ERROR_DEVICE_IN_USE = 2404;
private
const int
ERROR_NOT_CONNECTED = 2250;
private
const int
ERROR_OPEN_FILES = 2401;
#endregion
#region PInvoke Signatures
[DllImport("Mpr.dll")]
private
static extern int WNetUseConnection(
IntPtr
hwndOwner,
NETRESOURCE
lpNetResource,
string
lpPassword,
string
lpUserID,
int
dwFlags,
string
lpAccessName,
string
lpBufferSize,
string
lpResult
);
[DllImport("Mpr.dll")]
private
static extern int WNetCancelConnection2(
string
lpName,
int
dwFlags,
bool
fForce
);
[StructLayout(LayoutKind.Sequential)]
private
class NETRESOURCE
{
public
int dwScope = 0;
public
int dwType = 0;
public
int dwDisplayType = 0;
public
int dwUsage = 0;
public string
lpLocalName = "";
public
string lpRemoteName = "";
public
string lpComment = "";
public
string lpProvider = "";
}
#endregion
/// <summary>
/// Creates a NetworkShareAccesser for the given computer
name. The user will be promted to enter credentials
/// </summary>
/// <param
name="remoteComputerName"></param>
/// <returns></returns>
public static NetworkShareAccesser
Access(string remoteComputerName)
{
return
new NetworkShareAccesser(remoteComputerName);
}
/// <summary>
/// Creates a NetworkShareAccesser for the given computer name
using the given domain/computer name, username and password
/// </summary>
/// <param
name="remoteComputerName"></param>
/// <param
name="domainOrComuterName"></param>
/// <param
name="userName"></param>
/// <param
name="password"></param>
public static NetworkShareAccesser
Access(string remoteComputerName, string domainOrComuterName, string
userName, string password)
{
return
new NetworkShareAccesser(remoteComputerName,
domainOrComuterName + @"\"
+ userName,
password);
}
/// <summary>
/// Creates a NetworkShareAccesser for the given computer name
using the given username (format: domainOrComputername\Username) and password
/// </summary>
/// <param
name="remoteComputerName"></param>
/// <param
name="userName"></param>
/// <param
name="password"></param>
public static NetworkShareAccesser
Access(string remoteComputerName, string userName, string
password)
{
return
new NetworkShareAccesser(remoteComputerName,
userName,
password);
}
private
NetworkShareAccesser(string remoteComputerName)
{
RemoteComputerName =
remoteComputerName;
this.ConnectToShare(this._remoteUncName, null,
null, true);
}
private
NetworkShareAccesser(string remoteComputerName,
string userName, string
password)
{
RemoteComputerName =
remoteComputerName;
UserName = userName;
Password = password;
this.ConnectToShare(this._remoteUncName, this.UserName,
this.Password, false);
}
private
void ConnectToShare(string
remoteUnc, string username, string password, bool
promptUser)
{
NETRESOURCE
nr = new NETRESOURCE
{
dwType = RESOURCETYPE_DISK,
lpRemoteName = remoteUnc
};
int
result;
if
(promptUser)
{
result = WNetUseConnection(IntPtr.Zero, nr, "",
"", CONNECT_INTERACTIVE |
CONNECT_PROMPT, null, null,
null);
}
else
{
result = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);
}
if
(result != NO_ERROR)
{
throw
new Win32Exception(result);
}
}
private
void DisconnectFromShare(string remoteUnc)
{
int
result = WNetCancelConnection2(remoteUnc, CONNECT_UPDATE_PROFILE, false);
if
(result != NO_ERROR)
{
throw
new Win32Exception(result);
}
}
/// <summary>
/// Performs application-defined tasks associated with
freeing, releasing, or resetting unmanaged resources.
/// </summary>
/// <filterpriority>2</filterpriority>
public void Dispose()
{
this.DisconnectFromShare(this._remoteUncName);
}
}
}
How to Use It in Form:
using (NetworkShareAccesser.Access(ConfigurationManager.AppSettings["NetworkShareComputerName"].ToString(), ConfigurationManager.AppSettings["NetworkShareDomainName"].ToString(), ConfigurationManager.AppSettings["NetworkShareUserName"].ToString(), ConfigurationManager.AppSettings["NetworkShareUserPassword"].ToString()))
{
dir = new
DirectoryInfo(ConfigurationManager.AppSettings["ReinforcementXMLPath"].ToString());
FileInfo[]
file = dir.GetFiles();//here you get all file of the
network shared folder
//here you perform your
operation
}
ReplyDeleteThis information is impressive; I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic.
Online Reputation Management