复制文件是否为只读操作?

时间:2017-08-21 12:43:45

标签: c#

我想将一些文件复制到一堆其他路径,所以我这样做:

File.Copy(instancePath, destPath);

但问题是File.Copy太慢了(我假设它完全复制文件)。此外,我不需要更改目标文件,因此它是只读引用,但可以在复制完成后随时删除源。

除了手动复制整个内容以进行只读操作外,没有其他方法吗?

PS

文件非常大(> 1gb),因此将其复制到10个地方只是为了阅读 - 太贵了。

1 个答案:

答案 0 :(得分:3)

您不能复制该文件。您创建了一个指向该文件的硬链接。

我们倾向于将文件视为存储设备上的原子实体。这种观点是错误的。文件包含多个部分,元数据和内容。

在Windows中,一般来说,每个文件内容只有一组元数据(inode)。但是使用NTFS,很有可能创建多个inode,从而可以在多个位置访问该文件。

NTFS将跟踪每个文件有多少inode,并且只会在没有任何inode的文件上进行垃圾收集。因此,您的写入过程可以删除它的文件inode,而不会影响您的读取过程,如果您读取过程可以创建到原始文件的硬链接。

创建硬链接的过程非常快,因为它只需要写几个数据库。