复制文件边缘案例

时间:2015-06-03 21:07:16

标签: c# impersonation network-shares

我在UserX下运行了一个应用。我还有2个网络路径指向同一个共享的子文件夹,如:

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

UserX没有P1和P2的权限(这意味着他无法读取或写入),但我确实有UserP1和UserP2。 UserP1只能读/写P1。 UserP2只能读/写P2。

现在如何将文件从一个文件夹复制到另一个文件夹?

到目前为止,我坚持使用File.Copy和一些模仿但没有正面结果......我得到的只是“拒绝访问”......

详细信息:

  • 正在复制的文件可以达到20gb
  • 网络路径可能指向“\ localhost \ c $”
  • 这是一个“服务器端”应用程序,这意味着每秒将处理数百个请求...将文件读取到内存,切换凭据,写入将被视为最后的手段,因为明显的扩展问题。

1 个答案:

答案 0 :(得分:1)

使用指定的约束,您没有很多选项。

比“读取存储器/开关凭证/写入”更好的选择是执行以下操作:

在写入UserP1和UserP2都可以访问的第三个(可能是本地)位置时,以块的形式读取文件(例如,从Share 1作为UserP1)。然后从该位置读取文件为UserP2并写入共享2。

如果您能够以多线程方式执行此操作,则可以让UserP2在UserP1写入文件时开始读取文件。通过这种方式,您无需在开始复制到共享2之前等待写入第三个位置完成。您将承担第三个位置所需的存储空间的惩罚,但是读取整个文件时的内存损失都没有内存,也不是在开始写入共享2之前首先将整个文件复制到第三个位置的时间代价。