2015-06-03 3 views
0

У меня есть приложение под управлением UserX. У меня также есть 2 сетевые пути, которые указывают на подпапку же доля, как:Copy File Edge Case

  • P1 = \\MyMainShare\share\Folder 1
  • P2 = \\MyMainShare\share\Folder 2

UserX не имеет разрешения на как P1 и P2 (что означает он не может читать или писать там), но у меня есть UserP1 и UserP2. UserP1 может читать/писать только P1. UserP2 может читать/писать только P2.

Теперь, как я могу скопировать файл из одной папки в другую?

До сих пор я настаивал на File.Copy и некоторых видов перевоплощения, но без положительных результатов ... Все, что я получаю «Access Denied» ...

Детали:

  • Файлы копируемые может достигать 20 гб
  • Сетевой путь может указывать на «\ localhost \ c $»
  • Это приложение «на стороне сервера», что означает, что сотни запросов будут обрабатываться каждую секунду ... чтение файлов в память, переключение учетных данных, запись будет считаться последней инстанцией из-за очевидных проблем масштабирования ...

ответ

1

С указанными ограничениями у вас не так много вариантов.

Один, возможно, лучше, чем вариант «чтения памяти/переключения учетных данных/запись» будет сделать следующее:

Прочитайте файл (скажем, от Share 1, UserP1) на куски при записи на третий, возможно, местный , местоположение, к которому имеют доступ как UserP1, так и UserP2. Затем прочитайте файл из этого местоположения как UserP2 и напишите в Share 2.

Если у вас есть возможность сделать это многопоточным способом, вы можете заставить UserP2 начать читать файл, как пользовательский UserP1 пишет. Таким образом, вам не нужно будет дожидаться завершения записи до третьего места, прежде чем начать копирование для совместного использования 2. Вы понесли бы штраф за хранение, необходимое для третьего места, но ни задержка памяти при чтении всего файла к памяти, а также к временному штрафу при первом копировании всего файла на третье место, прежде чем начать писать в Share 2.