프로그래밍 방식으로 파일 공유에 액세스하는 방법 [복제
-
10-07-2019 - |
문제
이 질문은 이미 여기에 답이 있습니다.
도메인에 있지 않은 컴퓨터에서 실행되는 Windows Forms 앱이있어서 로컬 파일 시스템에서 UNC 경로로 파일을 이동할 수 있어야합니다. 그 길에 대한 사용자 이름과 비밀번호가 있습니다. 나는 실행과 함께 직접 이것을 할 수있는 방법이 있는지 궁금했다. net.exe
명령?
이상적으로는 드라이브를 매핑 할 필요가 없습니다.
해결책
이 질문에 대한 대답 여기 조사 할 가치가있는 것 같습니다. Win32 API 기능을 사용하는 것이 좋습니다 WnetUseConnection.
MSDN에서 :
그만큼 WnetUseConnection 함수는 네트워크 리소스에 연결됩니다. 이 기능은 로컬 장치를 네트워크 리소스로 리디렉션 할 수 있습니다.
언급없이 당신이 찾고있는 것을 성취하는 것 같습니다. net.exe
. 이것이 도움이됩니까?
다른 팁
WnetAddConnection을 사용하여이를 달성 할 수 있습니다. 당신은 pinvoke해야 할 것입니다. 아래 코드는 Pinvoke 선언을 설정 한 후 저를 위해 작동했습니다. 코드의 두 번째 블록 (아래)에는 Pinvoke 선언이 포함되어 있습니다.
public static void CopyFile(string from, string shareName, string username, string password)
{
NETRESOURCE nr = new NETRESOURCE();
nr.dwType = ResourceType.RESOURCETYPE_DISK;
nr.lpLocalName = null;
nr.lpRemoteName = shareName;
nr.lpProvider = null;
int result = WNetAddConnection2(nr, password, username, 0);
System.IO.File.Copy(from, System.IO.Path.Combine(shareName, System.IO.Path.GetFileName(from)));
}
다음 지원 코드를 클래스 (pinvoke.net에서 가져온)에 붙여 넣어야합니다. 코드에 사용법을 추가하십시오.
using System.Runtime.InteropServices
[DllImport("Mpr.dll", EntryPoint = "WNetAddConnection2", CallingConvention = CallingConvention.Winapi)]
private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword,
string lpUsername, System.UInt32 dwFlags);
[StructLayout(LayoutKind.Sequential)]
private class NETRESOURCE
{
public ResourceScope dwScope = 0;
public ResourceType dwType = 0;
public ResourceDisplayType dwDisplayType = 0;
public ResourceUsage dwUsage = 0;
public string lpLocalName = null;
public string lpRemoteName = null;
public string lpComment = null;
public string lpProvider = null;
};
public enum ResourceScope
{
RESOURCE_CONNECTED = 1,
RESOURCE_GLOBALNET,
RESOURCE_REMEMBERED,
RESOURCE_RECENT,
RESOURCE_CONTEXT
};
public enum ResourceType
{
RESOURCETYPE_ANY,
RESOURCETYPE_DISK,
RESOURCETYPE_PRINT,
RESOURCETYPE_RESERVED
};
public enum ResourceUsage
{
RESOURCEUSAGE_CONNECTABLE = 0x00000001,
RESOURCEUSAGE_CONTAINER = 0x00000002,
RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
RESOURCEUSAGE_SIBLING = 0x00000008,
RESOURCEUSAGE_ATTACHED = 0x00000010,
RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
};
public enum ResourceDisplayType
{
RESOURCEDISPLAYTYPE_GENERIC,
RESOURCEDISPLAYTYPE_DOMAIN,
RESOURCEDISPLAYTYPE_SERVER,
RESOURCEDISPLAYTYPE_SHARE,
RESOURCEDISPLAYTYPE_FILE,
RESOURCEDISPLAYTYPE_GROUP,
RESOURCEDISPLAYTYPE_NETWORK,
RESOURCEDISPLAYTYPE_ROOT,
RESOURCEDISPLAYTYPE_SHAREADMIN,
RESOURCEDISPLAYTYPE_DIRECTORY,
RESOURCEDISPLAYTYPE_TREE,
RESOURCEDISPLAYTYPE_NDSCONTAINER
};
제휴하지 않습니다 StackOverflow