【发布时间】:2009-04-21 19:02:38
【问题描述】:
我想将目录中的文件重命名为原子事务。该文件不会更改目录。该路径作为 NTFS 文件系统的 UNC 路径提供,可能在服务器 03 或 08 上。
File.Move() 是用于这些目的的原子吗?例如,它要么成功完成,要么失败,原始文件仍然完好无损?
我的直觉说是,但我想确定一下。
【问题讨论】:
-
顺便说一句,SVN 充分利用了移动是一个原子操作(在大多数文件系统上)这一事实,广泛用于在更新/提交期间保持完整性。
-
“原子”不是意味着有多个操作吗?这个特定的重命名如何进行多个操作?这不是复制+删除。
-
@Lucas:原子意味着操作,无论内部有多少步骤,总是一起发生。它不能被另一个线程部分抢占,等等。这是“原子”这个词的原始“不可分割”含义,现代物理学在实际原子的情况下已经证明了这一点......
-
@rmeador:我明白,但是这个重命名是一个单步操作。没有中间状态,它要么具有原始名称,要么具有新名称。称它为原子有意义吗?当然,除非我们认为所有单步操作本质上都是原子的:)
-
是的,询问重命名操作是否是原子操作是有意义的。仅仅因为从应用程序的角度来看它是一个单一的操作,我们不能假设文件系统驱动程序在一个操作中执行重命名。也许它必须更新文件名的 B 树,或者任何数量的其他本质上不是原子的东西。这真的取决于文件系统。
标签: c# .net filesystems