C# 通过网络共享移动文件是否安全/高效?

C# 通过网络共享移动文件是否安全/高效?,c#,windows,networking,copy,share,C#,Windows,Networking,Copy,Share,我有一个DocumentStore(网络共享的高级术语)和一个数据库,其中包含与复制到存储中的文档相关的条目。 我将使用数据库行的自动生成(int)ID作为文件名和分区目录结构(例如,ID=4433最终将被放入“\004\433\000000 4433.xxx”中) 复制文件时,我显然无法对数据库进行任何形式的锁定,但我不确定采取哪种策略更好: a) 将行添加到数据库以获取ID(可能带有InProgress标志),将文件复制到目标,然后在复制成功后再次更新行以清除标志 b) 将文件复制到共享根目

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

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

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

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


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

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

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

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

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

除上述情况外,使用Move/Move+Delete或Copy+Delete没有区别。

Tilak/Zdravko:Copy/Delete不适用于场景b,因为将有一个数据库事务打开-它需要(接近)即时。我需要确保移动功能(即仅更改目录指针)仍然适用,即使从不持有共享的机器调用。