0

我有一个在 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$”
  • 这是一个“服务器端”应用程序,这意味着每秒将处理数百个请求......由于明显的扩展问题,将文件读取到内存、切换凭据、写入将被视为最后的手段......
4

1 回答 1

1

使用指定的约束,您没有太多选择。

一个可能比“读取内存/切换凭据/写入”更好的选择是执行以下操作:

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

如果您有能力以多线程方式执行此操作,您可以让 UserP2 在 UserP1 写入文件时开始读取文件。这样,在开始复制到共享 2 之前,您不必等待对第三个位置的写入完成。您将招致第三个位置所需的存储空间的损失,但读取整个文件的内存损失也不会到内存,也不是在开始写入共享 2 之前首先将整个文件复制到第三个位置的时间损失。

于 2015-06-03T21:46:30.637 回答