0

我有一个带有另一个硬链接的文件。如何更改 Java 中的第一个文件,同时保持另一个硬链接中的内容不变?

这种行为就像 Windows 中的 gVim:

C:\Users\atry\break-hard-link>echo Hello, World > file1

C:\Users\atry\break-hard-link>mklink /H file2 file1
为 file2 <<===>> file1 创建了硬链接

C:\Users\atry\break-hard-link>gvim file1 :: Change file1 in gVim

C:\Users\atry\break-hard-link>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 B2F2-1B6E

 C:\Users\atry\break-hard-link 的目录

2012-11-04  11:33    <DIR>          .
2012-11-04  11:33    <DIR>          ..
2012-11-04  11:33                 8 file1
2012-11-04  11:32                15 file2
               2 个文件             23 字节
               2 个目录 365,748,248,576 可用字节

注意file1's size 和file2's size 现在不同了。

我试过new java.io.FileOutputStreamand java.nio.file.Files.newOutputStream,但两种方法都修改了file1and file2

我想知道 gVim 是如何做的,并在我的 Java 应用程序中应用相同的行为。

4

1 回答 1

1

我不知道 gVim 是如何做到的,但可靠的方法是

  1. 重命名旧文件(这将只重命名您选择的链接)
  2. 将数据复制到具有旧名称的新文件中
  3. 当您确定新文件已成功创建并关闭时,请删除旧文件

The only way to get a new inode (which is what is required to break the link) is to make a new copy of the data.

于 2012-11-04T04:21:11.423 回答