Nigol_Learner Ответов: 0

Как скопировать файл на клиентский компьютер удаленно?


string ff = @"C:\IpAdd\ipadd.txt";
            string line;
            StreamReader file = new StreamReader(ff);
            while ((line = file.ReadLine()) != null)
            {
                try
                {
                    NetworkCredential _readCredentail = new NetworkCredential(userName:"**", password:"**");
                    using (new NetworkConnection(line + @"\c", _readCredentail))
                    {
                        string path = line + @"\c\" + @"ProgramData\Microsoft\Windows\Start Menu\Programs\Startup";
                        File.Copy(path, @"\\192.168.*.**\fbar\TOOLS\ProbingApps\ProbingSystem\DesktopCopyTemp\EI_Startup.bat", true);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.ReadLine();   
                }     
            }
        }

        public class NetworkConnection : IDisposable
        {
            string _networkName;

            public NetworkConnection(string networkName,
            NetworkCredential credentials)
            {
                _networkName = networkName;

                var netResource = new NetResource()
                {
                    Scope = ResourceScope.GlobalNetwork,
                    ResourceType = ResourceType.Disk,
                    DisplayType = ResourceDisplaytype.Share,
                    RemoteName = networkName
                };
                var userName = string.IsNullOrEmpty(credentials.Domain)
                    ? credentials.UserName
                    : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);

                var result = WNetAddConnection2(
                    netResource,
                    credentials.Password,
                    userName,
                    0);
                if (result != 0)
                {
                   // throw new Win32Exception(result, "Error connecting to remote share");
                }
            }
            ~NetworkConnection()
            {
                Dispose(false);
            }

            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }

            protected virtual void Dispose(bool disposing)
            {
                WNetCancelConnection2(_networkName, 0, true);
            }

            [DllImport("mpr.dll")] private static extern int WNetAddConnection2(NetResource netResource,string password, string username, int flags);

            [DllImport("mpr.dll")] private static extern int WNetCancelConnection2(string name, int flags, bool force);
        }

        [StructLayout(LayoutKind.Sequential)]
        public class NetResource
        {
            public ResourceScope Scope;
            public ResourceType ResourceType;
            public ResourceDisplaytype DisplayType;
            public int Usage;
            public string LocalName;
            public string RemoteName;
            public string Comment;
            public string Provider;
        }

        public enum ResourceScope : int
        {
            Connected = 1,
            GlobalNetwork,
            Remembered,
            Recent,
            Context
        };

        public enum ResourceType : int
        {
            Any = 0,
            Disk = 1,
            Print = 2,
            Reserved = 8,
        }

        public enum ResourceDisplaytype : int
        {
            Generic = 0x0,
            Domain = 0x01,
            Server = 0x02,
            Share = 0x03,
            File = 0x04,
            Group = 0x05,
            Network = 0x06,
            Root = 0x07,
            Shareadmin = 0x08,
            Directory = 0x09,
            Tree = 0x0a,
            Ndscontainer = 0x0b
        }
    }


Что я уже пробовал:

Что не так с кодом, мне отказано в доступе.

Member 12599256

Другой вариант-использовать команду "NET USE" из командной строки. Запустите его с помощью процесса.Начнем с того, что это описание : http://www.howtogeek.com/118452/how-to-map-network-drives-from-the-command-prompt-in-windows/

Nigol_Learner

Я знаю, братан, просто я хочу, чтобы это было сделано на C#.

Garth J Lancaster

Полагаю, вы это замаскировали"\\192.168.*.**\fbar\ ... чисто для целей отображения здесь, на CP .. ? вы проверили учетные данные ? джентльмен, предложивший "сетевое использование", был в некотором смысле прав - проще сначала протестировать с помощью сетевого использования, а затем перевести в код

Я никогда такого не видел

var netResource = новый NetResource()
{
Scope = ResourceScope.GlobalNetwork,
ResourceType = ResourceType. Disk,
DisplayType = ResourceDisplaytype.Делиться,
RemoteName = сетевое имя
};

б / у-Я сделал очень похожее на карту диска, так что я посмотрю на эту технику

Garth J Lancaster

это fbar в этом "\\192.168.*.**\fbar\ установить как общую папку на удаленный сервер ?

Nigol_Learner

Использование "net use "для копирования просто отлично, и да, это общая папка" fbar". Я использую этот "public class NetworkConnection" для моего другого проекта, например, подсчитывает содержимое папки в клиентском ПК в определенном каталоге, он просто работает нормально, но теперь я использую для обработки файла с моего сервера fbar на мой клиентский ПК, я получаю отказ в доступе к моему клиентскому ПК.

0 Ответов