1

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

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

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

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

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

4

2 回答 2

0

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

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

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

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

于 2012-11-12T14:11:33.497 回答
0

移动是完全安全的。转到网络共享时,它与复制/删除没有太大区别。

于 2012-11-12T14:06:04.130 回答