Копирует ли файл по сети File.Copy () из общего сетевого ресурса в другой общий ресурс на том же компьютере? - PullRequest
12 голосов
/ 17 февраля 2009

Если мой клиент .NET использует System.IO.File.Copy , чтобы скопировать файл из \ server1 \ share1 \ file1.txt в \ sever1 \ share2 \ file2.txt , данные файла считываются клиенту и затем записываются обратно на сервер? Если да, есть ли способ .NET-клиент может скопировать файл на сервере в другое место на том же сервере, не обращая внимание на файл? Имеет ли значение, если конечный ресурс совпадает с исходным ресурсом?

Ответы [ 5 ]

7 голосов
/ 17 августа 2011

Это старый вопрос, но я не думаю, что здесь есть правильный ответ.

На самом деле есть 2 вопроса (3 вопроса, но третий является излишним).

Первый вопрос: если процесс .Net, запущенный на (3-м) клиентском компьютере, копирует файл из одного сетевого ресурса в другой сетевой ресурс, имеет ли значение, если исходный и целевой ресурсы находятся на одном компьютере (разные) с клиента) против 2 разных компьютеров? Ответ явно нет. Нет механизма, нет секретного туннеля между сетевыми ресурсами. Данные должны перемещаться к клиенту, а затем к другому ресурсу. Это не имеет значения, если операция является копией или перемещением, и на самом деле не имеет значения, если общие папки находятся на том же компьютере, что и клиент (и вы действительно получаете доступ к папкам как общие сетевые ресурсы с путем UNC, а не как локальные папки).

Второй вопрос: как избежать этого кругового обхода? Вот несколько предложений:

  1. Если источник и цель находятся в одном и том же общем ресурсе, перемещение файла не требует обратной передачи, поскольку ОС обновляет только ссылки в файловой системе.
  2. Процесс, запущенный на компьютере с исходным или целевым общим ресурсом, может выполнить копирование без обращения к клиенту. Этот процесс может быть удаленной копией и т.д., если любой из хостов работает под управлением Linux. На хосте Windows вы можете установить службу WCF, которая копирует файлы при поступлении запроса от клиента.
7 голосов
/ 17 февраля 2009

Да, это так. Я могу сказать это по личному опыту копирования 10 ГБ Zip-файлов между компьютерами. «Клиентская» машина находилась на другом побережье Америки, чем две другие машины. Между двумя машинами напрямую с одной из них ушло разумное количество времени. Попытка инициировать копирование с аппарата на другом берегу заняла ~ 10 часов: (

4 голосов
/ 17 февраля 2009

Содержимое файла должно пройти через аппарат, выполняющий операцию копирования. Единственный способ обойти это - запустить программы на целевых машинах, которые выполняют передачу без клиентского компьютера в середине. например, FXP , который использует FTP для передачи сервера на сервер.
Однако открытие этого пути может также открыть лазейку в безопасности, и я подозреваю, что многие администраторы неохотно позволят это.

2 голосов
/ 17 февраля 2009

Это отличный вопрос - я не могу найти однозначного ответа, так что, возможно, лучше всего было бы запустить Wireshark для теста.

0 голосов
/ 17 февраля 2009

Если возможно сделать ход вместо копии, это должно произойти мгновенно. В противном случае вам нужно разместить службу на целевом компьютере, чтобы вы могли вызывать ее удаленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...