Подтвердить что ты не робот

Ли File.Copy() из общего сетевого ресурса на другой общий ресурс на одном компьютере копирует файл по сети?

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

4b9b3361

Ответ 1

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

Ответ 2

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

На самом деле есть 2 вопроса (3 вопроса, но третий - избыточный).

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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