Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/48: Рейтинг темы: голосов - 48, средняя оценка - 4.71
DJ_DiX35

Копирование файлов на удаленный адрес

15.04.2013, 08:52. Показов 9585. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Искал данный вопрос по форуму, но так и не нашел ответа.

Задача:
С компьютера [A], на котором запущена программа, при нажатии на кнопку скопировать все файлы, находящиеся (к примеру) в папке C:\Upload на аналогичную папку (при необходимости - создать) компьютера [B], находящегося по адресу (к примеру) \\192.168.192.16

Ранее для этого писал батник использующий нет юз для подключения сетевого адреса как диска и копирования файлов командой икскопи, но хочется привести все к человеческому виду и в оболочке WinForms.
Сразу говорю что раньше с сетью в C# не работал вообще. А с файлами - только в плане создания|чтения|записи текстовых файлов и все)

Буду премного благодарен за любую посильную помощь.



П.С.
И еще - есть ли какая-либо возможность организовать прогрессбар для того чтобы видеть насколько скопировался файл(ы)?
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2013, 08:52
Ответы с готовыми решениями:

Простейший удаленный менеджер (дистанционное удаление, копирование и переименование файлов)
Помогите разработать на Microsoft Visual С++/C# простейший удаленный менеджер (дистанционное удаление, копирование и переименование файлов)

Копирование файлов на удаленный сервер по ssh
здравствуйте, (заранее извиняюсь может не попал в тему) такая проблема, есть сервер 1, после подключения к которому, можно подключиться к...

Получить удаленный ip адрес клиента
Здравствуйте. Подскажите пожалуйста, каким образом можно получить в программе удаленный ip адрес клиента подключившего к программе...

3
179 / 48 / 6
Регистрация: 23.06.2011
Сообщений: 248
15.04.2013, 14:05
Работа с файлами на удаленной машине ничем не отличается от работы с локальными, только в адресе файла пишешь путь сетевой.
Для подключения сетевой шары есть небольшой код, состоящий из API вызовов. Тут голову ломать не надо, просто подключаешь его и юзаешь 2 метода в конце: MapShare и DeleteShare. Довольно распространенная штука в сети, но сейчас искать некогда.
Код не мой, в свое время нашел на codeproject. Есть еще готовые решения в пару строчек, но мне это больше нравится - можно прикрутить то, что хочешь.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System.Runtime.InteropServices;
 
public class SambaShare
{
    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
    }
 
    [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;
    }
 
    [DllImport("mpr.dll")]
    private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);
    [DllImport("mpr.dll")]
    private static extern int WNetCancelConnection2(string lpName, int dwFlags, int fForce);
 
    public int MapShare(string unc, string user, string password)
    {
        NETRESOURCE myNetResource = new NETRESOURCE();
        myNetResource.lpRemoteName = unc;
        myNetResource.lpLocalName = null;
        myNetResource.lpProvider = null;
        int result = WNetAddConnection2(myNetResource, password, user, 0);
        return result;
    }
 
    public int DeleteShare(string path)
    {
        int result = WNetCancelConnection2(path, 0, 1);
        return result;
    }
}
Не помню только, если не нужен логин-пароль, что туда писать, поиграйся ) А, ключевая функция, по которой надо гуглить - WNetAddConnection2

Добавлено через 12 минут
Еще пара моментов: от net use ты никуда не денешься, т.е. метод подключения в итоге этот же будет использоваться. То есть, если после установки соединения в консоли ввести net use - то ты увидишь свое подключение.Соответственно, если у тебя на момент запуска программы уже установлено соединение, то использование MapShare вообще не нужно, работаешь с удаленными файлами так же, как и с локальными, только другой путь пишешь. Но если при установленном соединении еще раз подключиться - ничего страшного не будет.
Если после работы программы необходимо разорвать связь - юзай DeleteShare, иначе пользователь, под которым программа выполнялась, сможет без ввода логина-пароля подключиться к этой шаре.

И еще, если мне не изменяет память, этот же метод исползуется при подключении service controller на удаленной машине для управления службами (естественно, логин должны иметь права администратора). Конечно, там еще код есть, но и этот тоже нужен.
1
DJ_DiX35
15.04.2013, 15:32
smth, спасибо, буду пытаться разобраться)
Благодаря тебе хотя бы знаю в каком направлении двигатся))
И да, у нас тут все компы с паролями, так что наличие параметров юзер и пассворд даже в плюс)

Если вдруг у кого еще какие варианты решения моего вопроса есть - пишем, не стесняемся.
Я на 100% уверен что и другим людям данная информация пригодится.

И вопрос по поводу прогрессбара копирования остается на повестке. ^_^

Добавлено через 1 час 1 минуту
Нашел где ты в свое время это находил:
http://www.codeproject.com/Art... ve-using-C

Но даже это не помогло мне полностью разобраться.

какую именно команду нужно вызывать по нажатию на кнопку подключения? WNetAddConnection2? И если да то что там за параметры "NETRESOURCE lpNetResource" и "int dwFlags"?

П.С.
Хреново, когда плохо разбираешься в чужом коде.. =\
179 / 48 / 6
Регистрация: 23.06.2011
Сообщений: 248
15.04.2013, 16:58
Перечитай еще раз пост )
Тут голову ломать не надо, просто подключаешь его и юзаешь 2 метода в конце: MapShare и DeleteShare
Больше никакие методы оттуда трогать не надо.

Во вложении проект, в котором эта штука используется, он как раз копирует файлы из одного места в другое. Он умеет копировать из локальной папки в сетевую и все. Но большего от него и не требовалось.
Вложения
Тип файла: zip FileCopy.zip (64.9 Кб, 234 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2013, 16:58
Помогаю со студенческими работами здесь

Удалённый доступ и копирование
Здравствуйте. У меня такая проблема, есть локальная сеть, а в ней пк в котором я знаю(домен,пароль, имя пользователя, IP), мне надо с...

Копирование: Ввод имени папки и копирование из нее файлов
Доброго времени суток! Реально ли реализовать подобное с помощью bat ? Знаю, что можно создать папку с именем, которое можно задать. ...

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей выполняемой программы. 3. Вычислить...

Копирование файлов из одной папки в другую, но с пропуском одинаковых файлов в этих папках
Доброго времени суток. Прошу помощи в написании батника. Задача: Есть папка А с файлами 1,2,3 и папка Б с этими же файлами 1,2 и 3. ...

Копирование файлов из разных каталогов в каталоги с именами, соответствующими номерам в именах файлов
Добрый день! Помогите решить проблему. Есть семь папок (cam_1, cam_2, cam_3 и.т.д) с фотографиями (cam_1_00052.JPG, cam_1_00053.JPG,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru