【问题标题】:Is it safe/efficient to use File.Move over a network share?通过网络共享使用 File.Move 是否安全/有效?
【发布时间】:2012-10-31 22:58:10
【问题描述】:

我有一个 DocumentStore(网络共享的时髦术语)和一个数据库,其中包含与复制到存储中的文档相关的条目。 我将使用数据库行的自动生成 (int) ID 作为文件名和分区目录结构(例如,ID=4433 最终将被放入 '\004\433\0000004433.xxx')

我显然不能在复制文件时对数据库保持任何形式的锁定,但我不确定采取哪种策略更好:

a) 向数据库添加一行以获取 ID(可能带有 InProgress 标志),将文件复制到目标位置,然后再次更新该行以在复制成功后清除该标志。

b) 将文件复制到共享根目录下的临时文件名;完成后,将新行插入数据库以获取 ID 并调用 File.Move 将临时文件移动到正确的目的地。如果插入/移动文件是在事务中完成的,那么任何失败都意味着插入被回滚并且其他人看不到

(b) 如果确实是移动而不是复制/删除应该没问题,但这样做安全吗?

【问题讨论】:

  • Tilak/Zdravko:复制/删除不适用于方案 b,因为将有一个数据库事务打开 - 它需要(接近)即时。我需要确定移动功能(即只是更改目录指针)即使在从不持有共享的机器上调用时仍然适用。

标签: c# windows networking copy share


【解决方案1】:

Move 绝对安全。转到网络共享时,它与复制/删除没有太大区别。

【讨论】:

    【解决方案2】:

    移动与复制/删除一样安全。

    如果源和目标位于不同的卷上,则移动不会从源中删除。要么复制,要么不复制。

    Move = Copy if volume are different. (File.Delete is required to delete source file).  
    Move = Copy + Delete is volume is same.
    

    除上述之外,使用移动/移动+删除或复制+删除没有区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多