Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件的原子性。移动_C#_.net_Filesystems - Fatal编程技术网

C# 文件的原子性。移动

C# 文件的原子性。移动,c#,.net,filesystems,C#,.net,Filesystems,我想将目录中的文件重命名为原子事务。该文件将不会更改目录。该路径作为NTFS文件系统的UNC路径提供,可能位于服务器03或08上 出于这些目的,File.Move()是原子的吗?与中一样,它要么成功完成,要么失败,使原始文件仍然完好无损 我的直觉是肯定的,但我想确定。是的,在NTFS中。发件人: 另外,如果您在NTFS下运行,那么文件操作在文件系统级别上是原子的。就任何更高的代码而言,重命名将在单个操作中发生。您看到的问题几乎是FileInfo对象在应用程序之间共享的问题。它是MarshalBy

我想将目录中的文件重命名为原子事务。该文件将不会更改目录。该路径作为NTFS文件系统的UNC路径提供,可能位于服务器03或08上

出于这些目的,File.Move()是原子的吗?与中一样,它要么成功完成,要么失败,使原始文件仍然完好无损

我的直觉是肯定的,但我想确定。

是的,在NTFS中。发件人:

另外,如果您在NTFS下运行,那么文件操作在文件系统级别上是原子的。就任何更高的代码而言,重命名将在单个操作中发生。您看到的问题几乎是FileInfo对象在应用程序之间共享的问题。它是MarshalByRef对象,因此可以在远程处理环境中使用。不知道这是否适用于你


另一方面,SVN广泛地利用了移动是一个原子操作(在大多数文件系统上)的事实来维护更新/提交期间的完整性。“原子”不是意味着有多个操作吗?如何对多个操作进行此特定重命名?它不是复制+删除。@Lucas:atomic意味着操作,无论内部有多少步,总是同时进行。这是“原子”这个词最初的“不可分割”的意思,现代物理学已经证明它在实际原子中的意义是不可分割的…@rmeador:我理解,但这个重命名是一个单步操作。没有中间状态,它要么有原始名称,要么有新名称。称之为原子有意义吗?当然,除非我们认为所有的单步运算本质上都是原子的:是的,询问重命名操作是否是原子的是有意义的。从应用程序的角度来看,这只是一个操作,因此我们不能假设文件系统驱动程序在一个操作中执行重命名。也许它必须更新文件名的B-树,或者其他一些本质上不是原子的东西。这实际上取决于文件系统。嗯,但是如果.net应用程序运行在FAT上或者访问文件共享上的某个东西呢?其中是
File.Rename()
,作为其API的一部分,它将保证重命名是以原子方式执行的,或者它会引发一个异常,表明无法实现原子性?啊,显然我想要
File.Replace()
,它会在Windows 98或FAT上引发一个异常(或者在任何不能保证原子性的情况下,或者至少看起来是这样)。