공유폴더에 접근해 로그인하고 파일을 복사하는 방법을 남깁니다.
WNetUseConnection를 이용해 해당 공유폴더에 접속해서 로그인 하면 됩니다. 
그런데 그냥 로그인하고 파일 복사나 수정 / 삭제를 한뒤에 다시 연결을 끊어줘야 하는데 

그것이 마지막에 있는 WNetCancelConnection2A 입니다. 
되도록 작업이 끝난 후에는 닫아주는게 좋을거 같습니다. 

그리고 아래 코드를 이용해 연결 되었다면 File이나 FileInfo를 이용하면 됩니다.
class SharedAPI
    {
        // 구조체 선언
        [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;
        }

        // API 함수 선언
        [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);

        // API 함수 선언 (공유해제)
        [DllImport("mpr.dll", EntryPoint = "WNetCancelConnection2", CharSet = CharSet.Auto)]
        public static extern int WNetCancelConnection2A(string lpName, int dwFlags, int fForce);

        // 공유연결
        public int ConnectRemoteServer(string server)
        {
            int capacity = 64;
            uint resultFlags = 0;
            uint flags = 0;
            System.Text.StringBuilder sb = new System.Text.StringBuilder(capacity);
            NETRESOURCE ns = new NETRESOURCE();
            ns.dwType = 1;              // 공유 디스크
            ns.lpLocalName = null;   // 로컬 드라이브 지정하지 않음
            ns.lpRemoteName = server;
            ns.lpProvider = null;
            int result = 0;
            if (server == @"\\10.144.70.120\d$")
            {
                result = WNetUseConnection(IntPtr.Zero, ref ns, "djfrmfpdl", "administrator", flags,
                                            sb, ref capacity, out resultFlags);
            }
            else
            {
                result = WNetUseConnection(IntPtr.Zero, ref ns, "PASSWORD, "LOGINID", flags,
                                                sb, ref capacity, out resultFlags);
            }
            return result;
        }

        // 공유해제
        public void CencelRemoteServer(string server)
        {
            WNetCancelConnection2A(server, 1, 0);
        }
    }
Posted by 아르다