Tuesday, November 19, 2013

How to authenticate and add/remove files from the network shared path using C#.Net?

using System;


using System.Collections.Generic;

using System.Linq;

using System.Text;

using System;

using System.Runtime.InteropServices;

using BOOL = System.Boolean;

using DWORD = System.UInt32;

using LPWSTR = System.String;

using NET_API_STATUS = System.UInt32;



namespace ABC.ProjectName.Common

{

public class MultipleFileUpload : IDisposable

{

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]

internal struct USE_INFO_2

{

internal LPWSTR ui2_local;

internal LPWSTR ui2_remote;

internal LPWSTR ui2_password;

internal DWORD ui2_status;

internal DWORD ui2_asg_type;

internal DWORD ui2_refcount;

internal DWORD ui2_usecount;

internal LPWSTR ui2_username;

internal LPWSTR ui2_domainname;

}



[DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]

internal static extern NET_API_STATUS NetUseAdd(

LPWSTR UncServerName,

DWORD Level,

ref USE_INFO_2 Buf,

out DWORD ParmError);



[DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]

internal static extern NET_API_STATUS NetUseDel(

LPWSTR UncServerName,

LPWSTR UseName,

DWORD ForceCond);



private bool disposed = false;



private string sUNCPath;

private string sUser;

private string sPassword;

private string sDomain;

private int iLastError;



///

/// The last system error code returned from NetUseAdd or NetUseDel. Success = 0

///

public int LastError

{

get { return iLastError; }

}



public void Dispose()

{

if (!this.disposed)

{

NetUseDelete();

}

disposed = true;

GC.SuppressFinalize(this);

}



///

/// Connects to a UNC path using the credentials supplied.

///

/// Fully qualified domain name UNC path

/// A user with sufficient rights to access the path.

/// Domain of User.

/// Password of User

/// True if mapping succeeds. Use LastError to get the system error code.

public bool NetUseWithCredentials(string UNCPath, string User, string Domain, string Password)

{

sUNCPath = UNCPath;

sUser = User;

sPassword = Password;

sDomain = Domain;

return NetUseWithCredentials();

}



private bool NetUseWithCredentials()

{

uint returncode;

try

{

USE_INFO_2 useinfo = new USE_INFO_2();



useinfo.ui2_remote = sUNCPath;

useinfo.ui2_username = sUser;

useinfo.ui2_domainname = sDomain;

useinfo.ui2_password = sPassword;

useinfo.ui2_asg_type = 0;

useinfo.ui2_usecount = 1;

uint paramErrorIndex;

returncode = NetUseAdd(null, 2, ref useinfo, out paramErrorIndex);

iLastError = (int)returncode;

return returncode == 0;

}

catch

{

iLastError = Marshal.GetLastWin32Error();

return false;

}

}



///

/// Ends the connection to the remote resource

///

/// True if it succeeds. Use LastError to get the system error code

public bool NetUseDelete()

{

uint returncode;

try

{

returncode = NetUseDel(null, sUNCPath, 2);

iLastError = (int)returncode;

return (returncode == 0);

}

catch

{

iLastError = Marshal.GetLastWin32Error();

return false;

}

}





///

/// Ends the connection to the remote resource

///

/// True if it succeeds. Use LastError to get the system error code

public bool NetOptionMethod()

{

uint returncode;

try

{

returncode = NetUseDel(null, sUNCPath, 2);

iLastError = (int)returncode;

return (returncode == 0);

}

catch

{

iLastError = Marshal.GetLastWin32Error();

return false;

}

}

}

}



==============Calling the function====================



public string UploadDocument(string strAction,string strSourcePath,string strDestFileName)

{

//MultipleFileUpload unc = new MultipleFileUpload();

string strDomain = ConfigurationManager.AppSettings["Domain"].ToString();

string strUserId = ConfigurationManager.AppSettings["Userid"].ToString();

string strPwd = ConfigurationManager.AppSettings["Password"].ToString();

string strDestinationPath = ConfigurationManager.AppSettings["DestinationPath"].ToString();

using (MultipleFileUpload unc = new MultipleFileUpload())

{

if (unc.NetUseWithCredentials(strDestinationPath, strUserId, strDomain, strPwd))

{

strDestinationPath = strDestinationPath + "\\" + strDestFileName + "_" + Path.GetFileName(strSourcePath);



if (strAction == "ADD")

{

if(File.Exists(strSourcePath))

File.Move(strSourcePath, strDestinationPath);

}

else if (strAction == "DELETE")

{

if (File.Exists(strSourcePath))

File.Delete(strSourcePath);

}

}

}





return strDestinationPath;

}



No comments:

 
Feedback Form