通过网络共享使用File.Move安全/高效吗?

时间:2012-11-12 14:01:22

标签: c# windows networking copy share

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

我显然无法在复制文件时对数据库进行任何锁定,但我不确定哪种方法更好:

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

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

(b)如果它真的是一个Move而不是Copy / Delete应该没问题,但是这样做是否安全?

2 个答案:

答案 0 :(得分:0)

移动非常安全。与网络共享时的复制/删除没有太大区别。

答案 1 :(得分:0)

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

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

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

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