Como faço para acessar um compartilhamento de arquivo por meio de programação [duplicado]

StackOverflow https://stackoverflow.com/questions/1441406

Pergunta

Eu tenho um windows formulários aplicativo em execução em uma máquina que não estiver em um domínio, que precisa ser capaz de mover um arquivo do sistema de arquivos local para um caminho UNC. Eu tenho um nome de usuário e senha para esse caminho. Eu estava me perguntando se existe alguma maneira de fazer isso diretamente com a execing o comando net.exe?

Idealmente, eu não teria que mapear uma unidade.

Foi útil?

Solução

A resposta aceita sobre esta questão aqui parece que seria pena olhar para; que sugere o uso da função API Win32 WNetUseConnection .

De MSDN:

O WNetUseConnection função faz uma ligação a um recurso de rede. o função pode redirecionar um dispositivo local a um recurso de rede.

O que parece para realizar o que você está procurando, sem mencionar net.exe. Será que isso ajuda?

Outras dicas

Você pode usar WNetAddConnection para alcançar este objetivo. Você terá que pInvoke. o código abaixo funcionou para mim depois de eu configurar as declarações pinvoke. O segundo bloco de código (abaixo) contém as declarações pinvoke -. Basta colocá-lo dentro de uma classe


        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)));
        }


Você vai precisar para colar o código de suporte seguinte em uma classe (retirado pInvoke.Net). Certifique-se de adicionar um usando statment ao seu código:

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
        };

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top