일단 프로젝트를 하나 생성하고 거기에 버튼을 등록해서, 그 버튼을 클릭하면 네트워크 드라이브를 연결하는 프로그램을 만들어 본다.
그리고 클래스를 하나 등록.
클래스 명은 그냥 쓰기 편한 걸로...
물론 이렇게 안하고, 메인 폼에서 바로 작성 해도 되지만, 클래스를 하나 등록해서 하는게 나중에 두고 두고 써먹기 좋음.
그리고 그 클래스에 소스를 똭...
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; namespace NetDrive { class csNetDrive { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct NETRESOURCE { public uint dwScope; public uint dwType; public uint dwDisplayType; public uint dwUsage; public string lpLocalName; public string lpRemoteName; public string lpComment; public string lpProvider; } // Net Drive 연결 [DllImport("mpr.dll", CharSet = CharSet.Auto)] public static extern int WNetUseConnection( IntPtr hwndOwner, [MarshalAs(UnmanagedType.Struct)] ref NETRESOURCE lpNetResource, string lpPassword, string lpUserID, uint dwFlags, StringBuilder lpAccessName, ref int lpBufferSize, out uint lpResult); // Net Drive 연결 public int setRemoteConnection(string strRemoteConnectString, string strRemoteUserID, string strRemotePWD, string strLocalName) { int capacity = 64; uint resultFlags = 0; uint flags = 0; try { if ((strRemoteConnectString != "" || strRemoteConnectString != string.Empty) && (strRemoteUserID != "" || strRemoteUserID != string.Empty) && (strRemotePWD != "" || strRemotePWD != string.Empty)) { System.Text.StringBuilder sb = new System.Text.StringBuilder(capacity); NETRESOURCE ns = new NETRESOURCE(); ns.dwType = 1; ns.lpLocalName = strLocalName; // 로컬 드라이브명(null 이면 자동) ns.lpRemoteName = @strRemoteConnectString; ns.lpProvider = null; int result = WNetUseConnection(IntPtr.Zero, ref ns, strRemotePWD, strRemoteUserID, flags, sb, ref capacity, out resultFlags); return result; } else { return -1; } } catch (Exception ex) { return -1; } } // Net Drive 해제 [DllImport("mpr.dll", EntryPoint = "WNetCancelConnection2", CharSet = CharSet.Auto)] public static extern int WNetCancelConnection2(string lpName, int dwFlags, int fForce); // Net Drive 해제 public int CencelRemoteServer(string strRemoteConnectString) { int result; try { result = WNetCancelConnection2(strRemoteConnectString, 1, 1); } catch (Exception ex) { result = 0; } return result; } } }
"using System.Runtime.InteropServices;" 가 필요하니 등록해 주는거 잊지 말고...
그런 다음 메인 폼의 버튼 클릭 이벤트에 클릭시 저 클래스를 사용하는 소스를 등록해 준다.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace NetDrive { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // 네트워크 드라이브 연결 csNetDrive netDrive = new csNetDrive(); int getReturn = netDrive.setRemoteConnection(@"\\127.0.0.1\data", "son", "password", "Y:"); if (getReturn == 0) { MessageBox.Show ("set Net Drive : " + "네트워크 드라이브가 성공적으로 연결되었습니다."); } else { MessageBox.Show ("set Net Drive : " + "네트워크 드라이브를 연결할 수 없습니다.\r\n연결 정보를 확인하세요."); } } } }
현재 드라이브 상태는 이렇다.
아무런 네트워크 드라이브가 연결 되지 않은 상태.
요상태에서 방금 만든 프로그램을 실행 시키고.
저기 버튼을 클릭하면...
요렇게 연결 성공...
드라이브 확인해 보면. 네트워크 드라이브가 "Y:" 드라이브로 연결 된 것을 볼 수 있다.
이 연결된걸 끊을 려면...
일단 버튼 하나 추가해 주고....
private void button2_Click(object sender, EventArgs e) { // 네트워크 드라이브 연결 해제 csNetDrive dataDrive = new csNetDrive(); int getReturn = dataDrive.CencelRemoteServer("Y:"); }
클릭 이벤트에 연결 해재하는 소스를 등록해 주고, 실행.
"CencelRemoteServer()" 에 끊을 드라이브 명을 지정해야 한다는 것을 잊지 말자.
저기서 "넷드라이브 끊기" 버튼을 클릭하면...
이렇게 넷드라이브가 끊어 진다.